From 634cf9b063b0ceedf62b38b5c899ab7318f3d344 Mon Sep 17 00:00:00 2001 From: Luke Parker <10430890+Hona@users.noreply.github.com> Date: Wed, 21 Oct 2026 11:57:32 +1000 Subject: [PATCH] feat(app): turn the new session pins into a brick breaker easter egg (#57593) --- .../app/src/new-session/brick-breaker.tsx | 471 ++++++++++++++++++ packages/app/src/new-session/pin-board.tsx | 145 +++++- packages/app/src/new-session/pin-sound.ts | 16 + packages/app/src/new-session/view.tsx | 29 +- packages/app/src/new-session/wordmark.css | 14 + packages/app/src/new-session/wordmark.tsx | 140 +++++- 6 files changed, 797 insertions(+), 18 deletions(-) create mode 100644 packages/app/src/new-session/brick-breaker.tsx diff --git a/packages/app/src/new-session/brick-breaker.tsx b/packages/app/src/new-session/brick-breaker.tsx new file mode 100644 index 00000000000..8ef2c9de02c --- /dev/null +++ b/packages/app/src/new-session/brick-breaker.tsx @@ -0,0 +1,471 @@ +import { For, onCleanup, onMount } from "solid-js" +import type { PinBoardHandle } from "./pin-board" +import { PinSound } from "./pin-sound" +import type { LodgerBall } from "./wordmark" + +const LIVES = 3 +const ENTER = 0.85 +const EXIT = 1 + +type Phase = "enter" | "serve" | "play" | "miss" | "exit" +type Box = { x: number; y: number; w: number; h: number; r: number } + +/** + * A brick breaker homage. The lodger curls into the ball, the pins are the bricks, and the composer shrinks + * into the paddle. Like Arkanoid, the ball waits on the paddle until it is served with a click or Space. + */ +export function NewSessionBrickBreaker(props: { + panel: HTMLElement + board: PinBoardHandle + ball: LodgerBall + sound: () => boolean + onDone: () => void +}) { + let paddle!: HTMLDivElement + let hud!: HTMLDivElement + let score!: HTMLSpanElement + const spares: HTMLSpanElement[] = [] + const walls: HTMLSpanElement[] = [] + + onMount(() => + onCleanup( + mountGame({ panel: props.panel, paddle, hud, score, spares, walls }, props.board, props.ball, props.sound, props.onDone), + ), + ) + + return ( + <> +