@@ -36,6 +36,27 @@ export const DOT_SHAPES = {
3636 alien : [ ".ooo." , "ooooo" , "o.o.o" , ".ooo." , "..o.." ] ,
3737 robot : [ "ooooo" , "o.o.o" , "ooooo" , "o...o" , "ooooo" ] ,
3838 ghost : [ ".ooo." , "ooooo" , "o.o.o" , "ooooo" , "o.o.o" ] ,
39+ // Extended face set.
40+ owl : [ "o...o" , "ooooo" , "o.o.o" , ".ooo." , "..o.." ] ,
41+ dog : [ "o...o" , "ooooo" , "o.o.o" , "ooooo" , "..o.." ] ,
42+ bunny : [ ".o.o." , ".o.o." , "ooooo" , "o.o.o" , ".ooo." ] ,
43+ bear : [ ".o.o." , "ooooo" , "o.o.o" , "ooooo" , ".ooo." ] ,
44+ fox : [ "o...o" , "oo.oo" , "ooooo" , ".ooo." , "..o.." ] ,
45+ mouse : [ "oo.oo" , "ooooo" , "o.o.o" , ".ooo." , "..o.." ] ,
46+ koala : [ "oo.oo" , "ooooo" , "o.o.o" , "ooooo" , ".ooo." ] ,
47+ frog : [ ".o.o." , ".ooo." , "ooooo" , "o.o.o" , "ooooo" ] ,
48+ penguin : [ ".ooo." , "ooooo" , "o.o.o" , "ooooo" , "o...o" ] ,
49+ bat : [ "o...o" , "ooooo" , "o.o.o" , ".o.o." , "..o.." ] ,
50+ crab : [ "o...o" , "o.o.o" , "ooooo" , "ooooo" , ".o.o." ] ,
51+ spider : [ "o.o.o" , ".ooo." , "ooooo" , ".ooo." , "o.o.o" ] ,
52+ octopus : [ ".ooo." , "ooooo" , "o.o.o" , ".ooo." , "o.o.o" ] ,
53+ skull : [ ".ooo." , "ooooo" , "o.o.o" , ".ooo." , ".o.o." ] ,
54+ cyclops : [ ".ooo." , "ooooo" , "oo.oo" , ".ooo." , "..o.." ] ,
55+ demon : [ "o...o" , ".ooo." , "ooooo" , "o.o.o" , ".ooo." ] ,
56+ clown : [ "o.o.o" , "ooooo" , "o.o.o" , "ooooo" , ".ooo." ] ,
57+ mech : [ "ooooo" , "o.o.o" , "ooooo" , ".o.o." , "ooooo" ] ,
58+ angel : [ ".ooo." , "....." , "ooooo" , "o.o.o" , ".ooo." ] ,
59+ pumpkin : [ "..o.." , ".ooo." , "o.o.o" , "ooooo" , ".ooo." ] ,
3960 // Cycle shapes.
4061 square : [ "ooooo" , "o...o" , "o...o" , "o...o" , "ooooo" ] ,
4162 rectH : [ "....." , "ooooo" , "o...o" , "ooooo" , "....." ] ,
@@ -50,6 +71,29 @@ export type DotShapeName = keyof typeof DOT_SHAPES;
5071
5172export const FACE_SHAPES : DotShapeName [ ] = [ "face" , "invader" , "cat" , "alien" , "robot" , "ghost" ] ;
5273
74+ export const EXTRA_FACE_SHAPES : DotShapeName [ ] = [
75+ "owl" ,
76+ "dog" ,
77+ "bunny" ,
78+ "bear" ,
79+ "fox" ,
80+ "mouse" ,
81+ "koala" ,
82+ "frog" ,
83+ "penguin" ,
84+ "bat" ,
85+ "crab" ,
86+ "spider" ,
87+ "octopus" ,
88+ "skull" ,
89+ "cyclops" ,
90+ "demon" ,
91+ "clown" ,
92+ "mech" ,
93+ "angel" ,
94+ "pumpkin" ,
95+ ] ;
96+
5397// Sequenced so every consecutive pair (including the wrap) shares dots — the
5498// head hands off between shapes without ever jumping.
5599export const DEFAULT_PLAYLIST : DotShapeName [ ] = [
@@ -376,8 +420,13 @@ export function AgentDotMatrix({
376420 // Draw in device-pixel space with centers/radii snapped to whole device
377421 // pixels — dot positions never animate (only opacity), and unsnapped
378422 // fractional centers (e.g. 14px -> 2.8px pitch) blur every dot differently.
423+ // Light mode gets a size boost (snapped to half pixels): dark-on-light dots
424+ // read optically smaller than the same-size light-on-dark dots.
379425 const devCenter = ( cell : number ) => Math . round ( ( cell + 0.5 ) * pitch * dpr ) ;
380- const devDotR = Math . max ( 1 , Math . round ( dotR * dpr ) ) ;
426+ const devDotR =
427+ mode === "light"
428+ ? Math . max ( 1 , Math . round ( dotR * dpr * 1.15 * 2 ) / 2 )
429+ : Math . max ( 1 , Math . round ( dotR * dpr ) ) ;
381430
382431 const draw = ( ) => {
383432 ctx . setTransform ( 1 , 0 , 0 , 1 , 0 , 0 ) ;
0 commit comments