From 6bb76a3ba15bac0980b85ed0b8a63633a1ee1a2f Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 23 Oct 2026 16:28:40 +0200 Subject: companion: admire, turned to a wallpaper and then blushing The watch back view for 1.5 s, then blush3 for 3 s, at most every 3 minutes. Below clicks, so a click during it wins; above the mock and typing. Co-Authored-By: Claude Opus 5.5 --- desktop/companion/test_mood.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'desktop/companion/test_mood.js') diff --git a/desktop/companion/test_mood.js b/desktop/companion/test_mood.js index 96d1232..f24340c 100644 --- a/desktop/companion/test_mood.js +++ b/desktop/companion/test_mood.js @@ -19,7 +19,7 @@ const assert = require("assert"); const src = fs.readFileSync(__dirname + "/Mood.js", "utf8") .replace(/^\.pragma library$/m, ""); const M = new Function(src + - "\nreturn { T, click, clickFrame, pick, outfit, mockAllowed, canSpeak, monologue };")(); + "\nreturn { T, click, clickFrame, pick, outfit, mockAllowed, canSpeak, monologue, admireAllowed };")(); const lsrc = fs.readFileSync(__dirname + "/ListFile.js", "utf8") .replace(/^\.pragma library$/m, ""); const L = new Function(lsrc + "\nreturn { parse, toggle, outputs };")(); @@ -28,7 +28,7 @@ const NOW = 10000000; // A snapshot with nothing going on, overridden per case. const calm = over => Object.assign({ now: NOW, destructAt: 0, dodging: false, shoved: false, shovedAt: 0, recording: false, busy: false, - repliedAt: 0, clicks: { count: 0, at: 0 }, mockAt: 0, typingAt: 0, wakeAt: 0, + repliedAt: 0, clicks: { count: 0, at: 0 }, mockAt: 0, typingAt: 0, wakeAt: 0, admireAt: 0, monologue: false, idle: 0, }, over); const state = over => M.pick(calm(over)).state; @@ -48,6 +48,7 @@ const ladder = [ ["think", { busy: true }], ["wave", { repliedAt: NOW - 10 }], ["clicks", { clicks: { count: 2, at: NOW - 10 } }], + ["admire", { admireAt: NOW - 10 }], ["mock", { mockAt: NOW - 10 }], ["watch", { typingAt: NOW - 10 }], ["stretch", { wakeAt: NOW - 10 }], @@ -122,6 +123,14 @@ assert.strictEqual(M.monologue("other", 0, NOW, 0), false); assert.strictEqual(M.monologue("bored", NOW - M.T.monologueCooldown + 1, NOW, 0), false); assert.strictEqual(M.monologue("bored", NOW - M.T.monologueCooldown, NOW, 0), true); +// Admiring a wallpaper: turned to it, then blushing, then done. +assert.deepStrictEqual(M.pick(calm({ admireAt: NOW - 10 })), { state: "admire", frame: "watch" }); +assert.strictEqual(frame({ admireAt: NOW - M.T.admireLook }), "blush3"); +assert.strictEqual(state({ admireAt: NOW - M.T.admireLook - M.T.admireBlush }), "base"); +assert.strictEqual(M.admireAllowed(0, NOW), true); +assert.strictEqual(M.admireAllowed(NOW - M.T.admireCooldown + 1, NOW), false); +assert.strictEqual(M.admireAllowed(NOW - M.T.admireCooldown, NOW), true); + // The wallpaper list: paths, blank lines and # comments skipped. assert.deepStrictEqual(L.parse(""), []); assert.deepStrictEqual(L.parse("# mine\n/a.png\n\n /b.png \n#/c.png\n"), ["/a.png", "/b.png"]); -- cgit v1.2.3