From 8eda5c82b536cfb4209ca066ffd1334fbca5acc1 Mon Sep 17 00:00:00 2001 From: rope Date: Tue, 4 Aug 2026 13:34:20 +0100 Subject: [PATCH] quickshell: give Archie a gallop for the ball, move his bed next to the bowl Co-Authored-By: Claude Opus 5 --- settings/quickshell.nix | 66 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/settings/quickshell.nix b/settings/quickshell.nix index 007532b..326eb8d 100644 --- a/settings/quickshell.nix +++ b/settings/quickshell.nix @@ -1206,6 +1206,52 @@ in "........TTT..........TTT....................", "........TTTTT........TTTTT.................." ] + // Galloping for the ball. A bound, not a trot: reaching, with + // the hind legs thrown back and the front legs stretched out + // ahead — then everything gathered under him. Same body and + // tail as walkB; it is entirely in the legs. + readonly property var runA: [ + "...............................KKKKKKKK.....", + "..............................KKKKKKKKKK....", + "KKKK..........................KKKKKKKKKKK...", + "KKKK..........................KKKKK.KKKKK...", + "..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKK..TTKKKKK.", + ".KKKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTTT.", + "..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTT..", + "..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTT.....", + "...KKKKKKKKKKKKKKKKKKKKKKKKKTTKKKK..........", + "...KKKKKKKKKKKKKKKKKKKKKKKKKTTTKKK..........", + "...KKKKKKKKKKKKKKKKKKKKKKKKTTTT.............", + ".....KKKKKKKKKKKKKKKKKKKKKTTTT..............", + "....TTKKKKKKKKKKKKKKKKKKKTTTT...............", + ".....TTTTT..............TTTT................", + "....TTTTT................TTTT...............", + "...TTTTT..................TTTT..............", + "..TTTTT....................TTTT.............", + "..TTTTT....................TTTT.............", + ".TTTTTT....................TTTTTT..........." + ] + readonly property var runB: [ + "...............................KKKKKKKK.....", + "..............................KKKKKKKKKK....", + "KKKK..........................KKKKKKKKKKK...", + "KKKK..........................KKKKK.KKKKK...", + "..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKK..TTKKKKK.", + ".KKKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTTT.", + "..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTT..", + "..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTT.....", + "...KKKKKKKKKKKKKKKKKKKKKKKKKTTKKKK..........", + "...KKKKKKKKKKKKKKKKKKKKKKKKKTTTKKK..........", + "...KKKKKKKKKKKKKKKKKKKKKKKKTTTT.............", + ".....KKKKKKKKKKKKKKKKKKKKKTTTT..............", + "....TTKKKKKKKKKKKKKKKKKKKTTTT...............", + ".........TTTTT........TTTT..................", + "..........TTTTT......TTTT...................", + "...........TTTTT....TTTT....................", + "............TTTTT..TTTT.....................", + "............TTTTT..TTTT.....................", + "............TTTTTTTTTTTT...................." + ] // Standing: walkA's planted legs, walkB's tail. Flipping // between this and walkA is the wag. readonly property var wag: [ @@ -1310,8 +1356,12 @@ in readonly property real roamL: Theme.barWidth + 12 readonly property real roamR: Math.max(roamL, archie.width - Theme.frameWidth - cols * cell - 12) - readonly property real bowlX: Math.max(roamL, roamR - 120) - readonly property real bedX: Math.max(roamL, Math.min(bowlX - 500, roamL + 300)) + // Bed tucked into the bottom right corner, bowl beside it — + // his corner of the room. The bowl derives from the bed so + // they cannot drift into each other. + readonly property real bedX: Math.max(roamL, + archie.width - Theme.frameWidth - 54 * cell - 8) + readonly property real bowlX: Math.max(roamL, bedX - 16 * cell - 26) // Stand so his muzzle lands in the bowl, not his shoulder. readonly property real bowlStandX: bowlX - 32 * cell // Lying down, centred on the cushion. @@ -1481,15 +1531,21 @@ in archie.arrive(); } else { let dir = archie.targetX > archie.px ? 1 : -1; - let sp = archie.errand === "ball" ? 3.0 : 1.5; + let run = archie.errand === "ball"; + let sp = run ? 3.0 : 1.5; archie.facing = dir; archie.px += dir * sp; archie.stride += sp; - if (archie.stride >= 3 * archie.cell) { + // A gallop covers more ground per stride than + // a trot, so the frames hold longer even though + // he is moving faster. + if (archie.stride >= (run ? 6 : 3) * archie.cell) { archie.stride = 0; archie.stepped = !archie.stepped; } - archie.frame = archie.stepped ? archie.walkB : archie.walkA; + archie.frame = run + ? (archie.stepped ? archie.runB : archie.runA) + : (archie.stepped ? archie.walkB : archie.walkA); } } else { archie.frame = archie.mode === "eat" ? archie.eat