Add minimalist creature sections, 50 black-and-white and 50 colored

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-23 12:57:10 +00:00
co-authored by Claude Opus 5.5
parent c4dd37f62c
commit 95c6ae7fb4
302 changed files with 2655 additions and 2 deletions
+33
View File
@@ -0,0 +1,33 @@
// mole popping out of a dirt mound with a puff of dirt: it sniffs with its nose and whiskers, then ducks back down
const{sin,PI,max,min}=Math,T=2*PI
export const frames=24,delay=80,rim=3
export default(c,t)=>{
const up=x=>sin(x*PI*.6)/sin(PI*.6),u=t<.2?up(t/.2):t<.66?1:t<.8?1-sin(PI/2*(t-.66)/.14):0
const cy=240-90*u,sn=t>.24&&t<.62?sin(T*(t-.24)/.38):0,nx=1.5*sin(T*t*6)*(t>.24&&t<.62),tl=.07*sn,pw=min(1,max(0,(u-.5)/.5))
c.fillStyle=c.strokeStyle='#111';c.lineWidth=6
const shape=(x,y,r,f)=>{c.save();c.translate(x,y);c.rotate(r);c.beginPath();f();c.fill();c.stroke();c.restore()}
c.save();c.beginPath();c.rect(0,0,256,196);c.clip()
c.translate(128,196);c.rotate(tl);c.translate(-128,-196)
shape(128,cy,0,()=>c.ellipse(0,0,37,45,0,0,T))
if(cy<176){
c.lineWidth=2.5
for(const d of[-1,1])for(const e of[-5,6])c.beginPath(),c.moveTo(128+d*20,cy+6),c.lineTo(128+d*46,cy+6+e+2*sn*d),c.stroke()
c.lineWidth=6
}
c.restore()
if(pw>0)for(const d of[-1,1])shape(128+d*37,190-8*pw,d*.25,()=>c.ellipse(0,0,15,8,0,0,T))
shape(128,216,0,()=>{c.ellipse(0,0,92,30,0,PI,T);c.closePath()})
if(t>.02&&t<.27){
const p=(t-.02)/.25
for(const[d,s]of[[-1,1],[1,1],[-1,.6],[1,.6]])c.beginPath(),c.arc(128+d*(26+34*p*s),180-34*p*s+44*p*p,4.5*(1-.5*p),0,T),c.fill()
}
c.fillStyle=c.strokeStyle='#fff';c.lineWidth=3
c.beginPath();c.ellipse(128,190,30,7,0,.1*PI,.9*PI);c.stroke()
if(pw>0)for(const d of[-1,1])for(const k of[-1,0,1])c.beginPath(),c.moveTo(128+d*(41+k*5),186-8*pw),c.lineTo(128+d*(45+k*6),182-8*pw),c.stroke()
if(cy<176){
c.save();c.translate(128,196);c.rotate(tl);c.translate(-128,-196)
for(const d of[-1,1])c.beginPath(),c.arc(128+d*12,cy-12,2.8,0,T),c.fill()
c.beginPath();c.ellipse(128+nx,cy+3-Math.abs(nx),6.5,4.8,0,0,T);c.fill()
c.restore()
}
}