Files
Gabriel Vidal 11c10ab96f feat(ai-agent): pick up & drop the roaming avatar
The bottom-of-screen agent avatar (Hemp Henry) can now be grabbed and
dragged around. While held it plays a new 'lifted' dangle clip and
follows the pointer; on release it drops under gravity, keeps any throw
momentum, and bounces off the walls and floor with damping before
settling and resuming its wander. A quick press with no drag still
counts as a tap (random emote).

- AgentAvatar.tsx: pointer-capture drag + a gravity/bounce fall
  integrator; the wrapper now spans the full content area so it can be
  lifted, staying pointer-events-none except on the sprite itself.
- New 'lifted' Hemp Henry clip (nanobanana + brain bgremove): pose added
  to gen-avatar-sprites.sh + avatar_pipeline.py (fps 4), strip + manifest
  entry installed.
- install_sheets now merges into the published manifest instead of
  replacing it, so generating a single clip no longer clobbers the rest.
- visibility.ts: new 'Pick up avatar' switch (avatarDrag) so the
  grab/drop behavior can be turned off.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 13:26:11 +02:00

101 lines
1.5 KiB
JSON

{
"bash": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "bash.png"
},
"celebrate": {
"cell": 256,
"fps": 8,
"frames": 4,
"loop": true,
"src": "celebrate.png"
},
"commit": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "commit.png"
},
"deploy": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "deploy.png"
},
"happy": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "happy.png"
},
"idle": {
"cell": 256,
"fps": 3,
"frames": 4,
"loop": true,
"src": "idle.png"
},
"investigating": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "investigating.png"
},
"lifted": {
"cell": 256,
"fps": 4,
"frames": 4,
"loop": true,
"src": "lifted.png"
},
"notify": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "notify.png"
},
"oops": {
"cell": 256,
"fps": 4,
"frames": 4,
"loop": true,
"src": "oops.png"
},
"read": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "read.png"
},
"thinking": {
"cell": 256,
"fps": 3,
"frames": 4,
"loop": true,
"src": "thinking.png"
},
"walk": {
"cell": 256,
"fps": 8,
"frames": 4,
"loop": true,
"src": "walk.png"
},
"write": {
"cell": 256,
"fps": 6,
"frames": 4,
"loop": true,
"src": "write.png"
}
}