[object Object]

← back to Dead Agentabrams

Sync ROOM 01: articulated dancing bears

5f6518a7fd0e2999690ac9a5e2b82c7cd23ddbc9 · 2026-09-01 19:32:53 -0700 · Steve Abrams

Files touched

Diff

commit 5f6518a7fd0e2999690ac9a5e2b82c7cd23ddbc9
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Sep 1 19:32:53 2026 -0700

    Sync ROOM 01: articulated dancing bears
---
 room/index.html | 47 ++++++++++++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/room/index.html b/room/index.html
index ccf38a4..479325f 100644
--- a/room/index.html
+++ b/room/index.html
@@ -885,29 +885,38 @@ function bearAndFireflies(x,y,s,t,accent){
 }
 
 // two bear cubs dancing beside the conductor — bob + rock, bouncing harder on the beat when reactive
+// articulated "puppet-style" dancing bear — jointed limbs swing, hips sway, head bobs; bigger on the beat
 function bearCub(x,y,s,t,ph){
-  const beat=(S.pulse||0), amp=(S.amp||0);
-  const bounce=Math.abs(Math.sin(t*2.4+ph))*(2+beat*4+amp*2.5);   // a grounded bop — feet stay near the shore
-  const rock=Math.sin(t*2.4+ph)*0.2;
-  ctx.save(); ctx.translate(x,y-bounce); ctx.rotate(rock); ctx.scale(s,s);
-  cut('rgba(88,42,40,0.98)',2);
-  ctx.beginPath(); ctx.ellipse(0,-8,7,9,0,0,7); fillOutline();     // body
-  ctx.beginPath(); ctx.arc(0,-20,6,0,7); fillOutline();            // head
-  ctx.beginPath(); ctx.arc(-5,-25,2.5,0,7); fillOutline();         // ears
-  ctx.beginPath(); ctx.arc(5,-25,2.5,0,7); fillOutline();
-  ctx.strokeStyle=OUTLINE; ctx.lineWidth=3; ctx.lineCap='round';
-  const sw=Math.sin(t*4.8+ph)*3;                                   // arms wave in the dance
-  ctx.beginPath();
-  ctx.moveTo(-5,-11); ctx.lineTo(-10+sw,-17);
-  ctx.moveTo(5,-11);  ctx.lineTo(10+sw,-17);
-  ctx.moveTo(-3,0); ctx.lineTo(-3,4);
-  ctx.moveTo(3,0);  ctx.lineTo(3,4);
-  ctx.stroke();
+  const beat=(S.pulse||0), amp=(S.amp||0), e=1+beat*0.9+amp*0.5;
+  const sway=Math.sin(t*2.3+ph)*0.14*e;                 // hip sway
+  const bob=Math.abs(Math.sin(t*4.6+ph))*(2+beat*3+amp*2);  // small grounded bob
+  const step=Math.sin(t*2.3+ph);                        // alternating legs
+  const arm=Math.sin(t*2.3+ph+0.4);                     // waving arms
+  const FUR='rgba(84,40,38,0.98)';
+  ctx.save(); ctx.translate(x,y-bob); ctx.scale(s*1.2,s*1.2); ctx.rotate(sway);
+  function limb(px,py,ang,len,w,foot){                  // a jointed, outlined limb
+    ctx.save(); ctx.translate(px,py); ctx.rotate(ang); ctx.lineCap='round';
+    ctx.strokeStyle=OUTLINE; ctx.lineWidth=w+2.4; ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(0,len); ctx.stroke();
+    ctx.strokeStyle=FUR;     ctx.lineWidth=w;     ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(0,len); ctx.stroke();
+    if(foot){ cut(FUR,1.8); ctx.beginPath(); ctx.ellipse(0,len,3.2,2,0,0,7); fillOutline(); }
+    ctx.restore();
+  }
+  limb(-3.5,-3, 0.15+step*0.45, 12, 6.5, true);         // legs (behind body)
+  limb(3.5,-3, 0.15-step*0.45, 12, 6.5, true);
+  cut(FUR,2.6); ctx.beginPath(); ctx.ellipse(0,-12,8.5,11,0,0,7); fillOutline();   // body
+  ctx.fillStyle='rgba(122,68,58,0.9)'; ctx.beginPath(); ctx.ellipse(0,-10,4.5,6,0,0,7); ctx.fill(); // belly
+  limb(-7,-18, -0.7+arm*0.55, 11, 5, true);             // arms raised, waving
+  limb(7,-18, 0.7-arm*0.55, 11, 5, true);
+  cut(FUR,2.4); ctx.beginPath(); ctx.arc(0,-30,7,0,7); fillOutline();              // head
+  ctx.beginPath(); ctx.arc(-6,-36,3,0,7); fillOutline();                          // ears
+  ctx.beginPath(); ctx.arc(6,-36,3,0,7); fillOutline();
+  cut('rgba(150,96,74,0.98)',1.5); ctx.beginPath(); ctx.ellipse(0,-27,3.6,2.7,0,0,7); fillOutline(); // muzzle
+  ctx.fillStyle=OUTLINE; ctx.beginPath(); ctx.arc(0,-29,1.1,0,7); ctx.fill();      // nose
   ctx.restore();
 }
 function drawBearCubs(bx,by,t,scaleA){
-  bearCub(bx-46, by, 1.0*scaleA, t, 0.0);
-  bearCub(bx+42, by, 0.9*scaleA, t, 1.7);
+  bearCub(bx-60, by, 1.0*scaleA, t, 0.0);
+  bearCub(bx+54, by, 0.95*scaleA, t, 1.7);
 }
 
 // shoreline songbirds that "sing" the music — note-bubbles pop on the beat (♪♫♬, never lyrics)

← 5aaf321 Sync ROOM 01: museum label documents all controls + full cas  ·  back to Dead Agentabrams  ·  Sync ROOM 01: colorful dancing-bear troupe synced to music c315f1a →