9ff5ef683d980676ef746e6b64fe03b1e172dacc
## What changed - the-matrix/js/agents.js — face expression system added to Timmy wizard ## Face geometry (all parented to head — follow head.rotation.z tilt) - White sclera eyes (MeshStandardMaterial f5f2e8, emissive 0x777777@0.10) replace the old flat dark-blue spheres - Dark pupils (MeshBasicMaterial 0x07070f) as child meshes of each sclera; they scale with the parent eye for squint effect - Mouth arc: TubeGeometry built from QuadraticBezierCurve3; control point moves ±0.065 on Y for smile/frown; rebuilt via _buildMouthGeo() only when |smileDelta| > 0.016 (throttled to avoid per-frame GC pressure) - All face meshes are children of `head` — head.rotation.z carries every face component naturally with the existing head-tilt animation ## FACE_TARGETS lookup table (lidScale, pupilScale, smileAmount) - idle (contemplative): 0.44 / 0.90 / 0.08 — half-lid, neutral - active (curious): 0.92 / 1.25 / 0.38 — wide eyes + dilated pupils, smile - thinking (focused): 0.30 / 0.72 / -0.06 — squint + constricted pupils, flat - working (attentive): 0.22 / 0.80 / 0.18 — very squint, slight grin ## setFaceEmotion(mood) exported API - Accepts both task-spec names (contemplative|curious|focused|attentive) and internal state names (idle|active|thinking|working) via MOOD_ALIASES - Immediately sets faceTarget; lerp in updateAgents() handles the smooth transition ## Per-frame lerp (rate 0.055/frame) in updateAgents - lidScale → eyeL.scale.y / eyeR.scale.y (squash for squint) - pupilScale → pupilL.scale / pupilR.scale (uniform dilation) - smileAmount → drives TubeGeometry rebuild when drift > 0.016 ## Lip-sync while speaking (~1 Hz) - speechTimer > 0: smileTarget = 0.28 + sin(t*6.283)*0.22 - Returns to mood target when timer expires ## Validation - Vite build: clean (14 modules, 542 kB, no errors) - testkit: 27/27 PASS (after server restart to clear rate-limit counters)
Description
Timmy Tower World — sovereign AI agent economy
Languages
TypeScript
68.9%
JavaScript
15.5%
Shell
10.6%
HTML
4.5%
CSS
0.4%