Clatterfall : une bille, un subreddit, une exécution partagée par jour, une machine que personne ne peut bâtir seul
r/Clatterfall est une descente continue, bâtie par une foule, une pièce par personne par jour. Chaque matin, toute la machine engagée est ré-exécutée comme une simulation canonique unique que tout le monde regarde ensemble, et les pièces que la bille abandonne se dissolvent. Trois règles portent le poids : on ne peut bâtir que sur le chemin réel de la bille (la frontière), l'exécution quotidienne est simulée côté serveur une fois et rejouée identique au pixel partout, et les pièces que la bille cesse de toucher se dissolvent. Non-IA et fier de l'être : chaque pixel dessiné à partir de primitives Phaser Graphics à l'exécution.
Je collectionnais des billes enfant et j'en gardais une boîte, le genre de petit trésor privé qu'on ressort et qu'on admire seul. Clatterfall est l'inverse de cette boîte. Il y a une seule bille, et elle appartient à tout le monde. Un subreddit entier bâtit la machine dans laquelle elle descend, une pièce par jour, et chaque matin on regarde tous la même bille ensemble. Je voulais prendre ce que j'aimais seul enfant et en faire quelque chose qu'une communauté fait au même moment.

Le hook : la raison de revenir est un cliffhanger, pas une notification
- Chaque matin une tâche planifiée re-simule toute la machine engagée et lance une bille. On ouvre le post pour regarder la bille traverser tout le contraption communautaire et découvrir : a-t-on battu un record, ou une mauvaise pièce nous a coupés court de l'objectif ?
- Puis on dépense sa seule pièce du jour. On en a exactement une par jour. On la pose sur la frontière vivante de la machine, on argumente en commentaires sur quoi bâtir ensuite, et son streak monte.
- Demain la bille repasse à travers tout, y compris ta pièce, et tout le monde revient voir jusqu'où elle est allée.

La frontière est le couloir de chute réel de la bille
La frontière n'est pas un large éventail de cellules sous le dernier contact de la machine. C'est le vrai chemin de chute de la bille, élargi d'une colonne de chaque côté. C'est parti d'un choix esthétique et c'est devenu structurel. Quand la frontière était un cône large, la plupart des cellules légales étaient des endroits où la bille n'irait jamais, donc une pièce bâtie là n'était touchée par rien, ne marquait rien, et se dissolvait. Le jeu invitait les gens à dépenser leur seule pièce du jour là où elle ne pouvait pas compter. Bâtir là où la bille passe vraiment est ce qui rend une pièce capable de compter.


Chaque pièce est signée, et créditée exactement du chemin qu'elle a fait porter à la bille
On tape n'importe quelle pièce posée pour voir qui l'a bâtie et jusqu'où elle a fait aller la bille au dernier run (« la rampe de u/alice, a porté +118 px »), puis on vote pour la garder ou la couper. La carte de résultat nomme les trois redditors dont les pièces ont porté la bille le plus loin aujourd'hui, et la carte splash affiche « bâti par N redditors ». Le collectif est visible, pas abstrait. L'attribution utilise un accumulateur à marque de plus haute eau, pour que le crédit de chaque pièce s'additionne exactement à REACH même quand un rebondisseur renvoie la bille vers le haut.

Le résultat quotidien : NEW RECORD / TIED / CAPPED SHORT / GOAL
À l'approche de la ligne de record, la lecture se dilate en slow motion et la caméra se penche, pour que le moment que toute la communauté attend joue vraiment comme un moment. Puis la règle se remplit vers la punaise du record et l'une des quatre résolutions tombe : NEW RECORD, TIED, CAPPED SHORT, ou GOAL. Un camera-shake sur un record battu. Confettis dessinés à partir de primitives Phaser Graphics, pas d'une sprite sheet.

La dissolution : aucun vote ne peut sauver une pièce inutile
Les pièces que la bille cesse de toucher se dissolvent la nuit. Une pièce qui bloque la bille se dissout le lendemain. Rien dans la lignée des machines-de-foule ne taille les contributions selon le résultat de simulation, donc la machine est sous sélection négative constante : seul ce que la bille utilise vraiment survit. Une pièce que la bille a utilisée au dernier run ne peut jamais être votée dehors.

Pourquoi c'est Reddit-y (et pas de l'AI slop)
Le brief Reddit mettait en garde contre l'« AI slop ». Alors il n'y en a pas dans Clatterfall. Chaque pixel du jeu (pièces, bille, règle, ligne de record, confettis) est dessiné à partir de primitives Phaser Graphics à l'exécution. Pas de sprite sheets, pas d'art de stock, pas d'images générées par IA nulle part dans le projet. La carte de flux hors du jeu est du HTML écrit à la main plus un seul SVG inline. C'est non-IA et fier de l'être, ce qui est la bonne réponse à ce brief. La couche communautaire est Reddit-native par construction : le fil de commentaires devient l'arène de coordination (« quelqu'un a mis un rebondisseur en 4,6 pour qu'on arrête de coller le mur gauche »), une pièce posée par personne par jour rend chaque contribution conséquente et jamais du spam, et le run partagé du matin est le rituel r/place reconditionné en artefact qui tourne.

Les deux problèmes durs, réglés par le design
- Coordination. Le placement est aligné sur la grille, une pièce par cellule (premier commit gagne, atomique via Redis hSetNX), une pièce par utilisateur par jour, et restreint à la frontière vivante de la bille. Des centaines de pièces quotidiennes deviennent un contraption 2D délibéré, jamais un tas chaotique ni une ligne à une largeur. Une mauvaise pièce ne peut que plafonner la distance, jamais briquer la chaîne de façon permanente (un plancher de rattrapage doux est toujours maintenu sous la machine). Les pièces mortes ou downvotées se décomposent et libèrent leur cellule, alors la machine se répare.
- Déterminisme. La bille est simulée une seule fois, côté serveur, par run quotidien, et stockée comme un chemin de keyframes compact. Chaque client rejoue simplement ces keyframes en tweens. Il n'y a pas de physique côté client, donc le run est identique au pixel près pour chaque joueur sur chaque appareil. La dérive entre appareils est structurellement impossible.
- Les affirmations d'équilibre sont reproductibles, pas déclarées. npx tsx tools/season-sim.mts joue des saisons de 20 jours avec une foule amorcée et imprime le record, la taille de la frontière, et combien la bille a taillé. C'est aussi le script qui a attrapé deux bugs silencieux : il a prouvé qu'une pièce non touchée ne peut pas bouger le record, et c'est ce qui a montré que des joueurs aléatoires n'amélioraient jamais le record en 20 jours sous l'ancienne frontière en cône.
Limites honnêtes
- Amorcé, pas encore adopté. Un post fraîchement installé livre une vraie cascade de démarrage de 26 pièces (construite par la même logique gloutonne « étendre la portée » que le jeu récompense, donc les 26 pièces d'amorce sont réellement sur le chemin de la bille). Pour rendre la course au record réelle pour le jugement, la machine a besoin d'une cohorte vivante qui pose des pièces sur plusieurs jours UTC.
- Le ressenti physique dépend du playtest. Les valeurs de gravité, restitution et friction sont réglées pour sembler denses et se reposer de manière fiable, mais un vocabulaire de pièces plus large demanderait plus de réglage. La palette de quatre pièces statiques est un choix de portée délibéré qui garde la bille comme seul corps dynamique (ce qui protège aussi le déterminisme).
- Coupé pour la portée, facile à ajouter plus tard : un minimap dézoomé, une galerie Hall of Machines des saisons terminées, et des pièces plus riches (un spinner et une bascule ont été conçus puis délibérément reportés).
Clatterfall: A Whole Subreddit Builds One Marble Machine, One Part a Day, and Every Morning We All Watch the Same Marble
Voir le projet