← back to Scarlet Riverboat Masquerade
Beef up the bear dance: bigger sway + always-grooving bounce + bigger arm waves/leg steps + stronger beat hop; more sensitive beat detector so hops fire more often against live music
91da5700ef8f1bc4fcb0eb3ad577f2931c102b73 · 2026-09-01 22:15:59 -0700 · Steve Abrams
Files touched
Diff
commit 91da5700ef8f1bc4fcb0eb3ad577f2931c102b73
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Sep 1 22:15:59 2026 -0700
Beef up the bear dance: bigger sway + always-grooving bounce + bigger arm waves/leg steps + stronger beat hop; more sensitive beat detector so hops fire more often against live music
---
index.html | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/index.html b/index.html
index 137f2f3..0df967b 100644
--- a/index.html
+++ b/index.html
@@ -910,10 +910,10 @@ function bearAndFireflies(x,y,s,t,accent){
// articulated "puppet-style" dancing bear — jointed limbs swing, hips sway, head bobs; bigger on the beat
function bearCub(x,y,s,t,ph,FUR){
const beat=(S.pulse||0), amp=(S.amp||0), e=1+beat*0.9+amp*0.5;
- const sway=Math.sin(t*2.6+ph)*0.22*e; // lively hip sway
- const bob=Math.abs(Math.sin(t*5.2+ph))*(2.5+amp*2.5) + beat*12; // dances free-running, HOPS on each beat when reacting
- const step=Math.sin(t*2.6+ph); // alternating dance steps
- const armL=Math.sin(t*3.4+ph), armR=Math.sin(t*3.4+ph+Math.PI); // hands wave overhead, alternating
+ const sway=Math.sin(t*2.8+ph)*0.30*e; // big lively hip sway
+ const bob=Math.abs(Math.sin(t*5.4+ph))*(4.5+amp*4) + beat*15; // always grooving; big HOP on each beat when reacting
+ const step=Math.sin(t*2.8+ph); // alternating dance steps
+ const armL=Math.sin(t*3.6+ph), armR=Math.sin(t*3.6+ph+Math.PI); // hands wave overhead, alternating
FUR = 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
@@ -923,12 +923,12 @@ function bearCub(x,y,s,t,ph,FUR){
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.12+step*0.55, 12, 6.5, true); // legs — alternating dance steps
- limb(3.5,-3, 0.12-step*0.55, 12, 6.5, true);
+ limb(-3.5,-3, 0.12+step*0.7, 12, 6.5, true); // legs — big alternating dance steps
+ limb(3.5,-3, 0.12-step*0.7, 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(255,255,255,0.22)'; ctx.beginPath(); ctx.ellipse(0,-10,4.5,6,0,0,7); ctx.fill(); // belly highlight
- limb(-7,-18, 2.3+armL*0.45+beat*0.35, 11, 5, true); // arms raised overhead, waving + thrust up on the beat
- limb(7,-18, -2.3+armR*0.45-beat*0.35, 11, 5, true);
+ limb(-7,-18, 2.3+armL*0.7+beat*0.45, 11, 5, true); // arms overhead, big waves + thrust up on the beat
+ limb(7,-18, -2.3+armR*0.7-beat*0.45, 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();
@@ -1426,7 +1426,7 @@ function sampleLevel(){
window.SRM.level = window.SRM.level*0.6 + raw*0.4; // smoothed 0..1
// beat detection: a bass spike well above the running average, rate-limited
_avg = _avg*0.92 + raw*0.08; _clock++;
- if(raw > _avg*1.15 && raw > 0.16 && (_clock-_lastBeat) > 6){
+ if(raw > _avg*1.10 && raw > 0.12 && (_clock-_lastBeat) > 5){
_lastBeat=_clock; window.SRM.beat=(window.SRM.beat||0)+1; window.SRM.pulse=1;
}
window.SRM.pulse = (window.SRM.pulse||0)*0.86; // decaying throb (spikes to 1 on a beat)
← cf28d81 Collapse all control panels on load; add master ☰ Controls t
·
back to Scarlet Riverboat Masquerade
·
Concert venue backdrops (per-show stage-light beams + venue c67e4f5 →