diff --git a/dist/extension.zip b/dist/extension.zip index bf4a180..771fd95 100644 Binary files a/dist/extension.zip and b/dist/extension.zip differ diff --git a/dist/extension/birb.js b/dist/extension/birb.js index 9222eba..2494b44 100644 --- a/dist/extension/birb.js +++ b/dist/extension/birb.js @@ -2047,7 +2047,8 @@ // Timing constants (in milliseconds) const UPDATE_INTERVAL = 1000 / 60; // 60 FPS - const AFK_TIME = isDebug() ? 0 : 1000 * 5; + const AFK_TIME = isDebug() ? 0 : 1000 * 5; // 5 seconds + const SUPER_AFK_TIME = 1000 * 60 * 60; // 1 hour const PET_MENU_COOLDOWN = 1000; const URL_CHECK_INTERVAL = 150; const HOP_DELAY = 500; @@ -2056,7 +2057,7 @@ const HOP_CHANCE = 1 / (60 * 2.5); // Every 2.5 seconds const FOCUS_SWITCH_CHANCE = 1 / (60 * 20); // Every 20 seconds const FEATHER_CHANCE = 1 / (60 * 60 * 60 * 2); // Every 2 hours - const HAT_CHANCE = 1 / 50; // Every 50 webpages + const HAT_CHANCE = 1 / (60 * 60 * 10); // Every 10 minutes // Feathers const FEATHER_FALL_SPEED = 1; @@ -2161,7 +2162,7 @@ insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem(() => `2026.1.21 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.21"); }, false), + new MenuItem(() => `2026.1.22 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.22"); }, false), ]; const styleElement = document.createElement("style"); @@ -2348,24 +2349,12 @@ log("Path changed from '" + lastPath + "' to '" + currentPath + "'"); lastPath = currentPath; drawStickyNotes(stickyNotes, save, deleteStickyNote); - determineHatUnlock(); } }, URL_CHECK_INTERVAL); setInterval(update, UPDATE_INTERVAL); focusOnElement(true); - - determineHatUnlock(); - } - - function determineHatUnlock() { - if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { - insertHat(); - } else if (location.hostname === "127.0.0.1") { - log("Inserting hat for debug purposes"); - insertHat(); - } } function update() { @@ -2398,12 +2387,17 @@ } } - // Double the chance of a feather if recently pet - const petMod = isPetBoostActive() ? PET_FEATHER_BOOST : 1; - if (birb.isVisible() && Math.random() < FEATHER_CHANCE * petMod) { - lastPetTimestamp = 0; - activateFeather(); + if (birb.isVisible() && Date.now() - lastActionTimestamp < SUPER_AFK_TIME) { + if (Math.random() < FEATHER_CHANCE * (isPetBoostActive() ? PET_FEATHER_BOOST : 1)) { + lastPetTimestamp = 0; + activateFeather(); + } + if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { + lastPetTimestamp = 0; + insertHat(); + } } + updateFeather(); } diff --git a/dist/extension/manifest.json b/dist/extension/manifest.json index 283d052..513ec61 100644 --- a/dist/extension/manifest.json +++ b/dist/extension/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Pocket Bird", "description": "It's a pet bird in your browser, what more could you want?", - "version": "2026.1.21", + "version": "2026.1.22", "homepage_url": "https://idreesinc.com", "icons": { "48": "images/icons/transparent/48x48x1.png", diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index 27c4caf..21b0df1 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -1,7 +1,7 @@ const { Plugin, Notice } = require('obsidian'); module.exports = class PocketBird extends Plugin { onload() { - console.log("Loading Pocket Bird version 2026.1.21..."); + console.log("Loading Pocket Bird version 2026.1.22..."); const OBSIDIAN_PLUGIN = this; (function () { 'use strict'; @@ -2090,7 +2090,8 @@ module.exports = class PocketBird extends Plugin { // Timing constants (in milliseconds) const UPDATE_INTERVAL = 1000 / 60; // 60 FPS - const AFK_TIME = isDebug() ? 0 : 1000 * 5; + const AFK_TIME = isDebug() ? 0 : 1000 * 5; // 5 seconds + const SUPER_AFK_TIME = 1000 * 60 * 60; // 1 hour const PET_MENU_COOLDOWN = 1000; const URL_CHECK_INTERVAL = 150; const HOP_DELAY = 500; @@ -2099,7 +2100,7 @@ module.exports = class PocketBird extends Plugin { const HOP_CHANCE = 1 / (60 * 2.5); // Every 2.5 seconds const FOCUS_SWITCH_CHANCE = 1 / (60 * 20); // Every 20 seconds const FEATHER_CHANCE = 1 / (60 * 60 * 60 * 2); // Every 2 hours - const HAT_CHANCE = 1 / 50; // Every 50 webpages + const HAT_CHANCE = 1 / (60 * 60 * 10); // Every 10 minutes // Feathers const FEATHER_FALL_SPEED = 1; @@ -2204,7 +2205,7 @@ module.exports = class PocketBird extends Plugin { insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem(() => `2026.1.21 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.21"); }, false), + new MenuItem(() => `2026.1.22 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.22"); }, false), ]; const styleElement = document.createElement("style"); @@ -2391,24 +2392,12 @@ module.exports = class PocketBird extends Plugin { log("Path changed from '" + lastPath + "' to '" + currentPath + "'"); lastPath = currentPath; drawStickyNotes(stickyNotes, save, deleteStickyNote); - determineHatUnlock(); } }, URL_CHECK_INTERVAL); setInterval(update, UPDATE_INTERVAL); focusOnElement(true); - - determineHatUnlock(); - } - - function determineHatUnlock() { - if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { - insertHat(); - } else if (location.hostname === "127.0.0.1") { - log("Inserting hat for debug purposes"); - insertHat(); - } } function update() { @@ -2441,12 +2430,17 @@ module.exports = class PocketBird extends Plugin { } } - // Double the chance of a feather if recently pet - const petMod = isPetBoostActive() ? PET_FEATHER_BOOST : 1; - if (birb.isVisible() && Math.random() < FEATHER_CHANCE * petMod) { - lastPetTimestamp = 0; - activateFeather(); + if (birb.isVisible() && Date.now() - lastActionTimestamp < SUPER_AFK_TIME) { + if (Math.random() < FEATHER_CHANCE * (isPetBoostActive() ? PET_FEATHER_BOOST : 1)) { + lastPetTimestamp = 0; + activateFeather(); + } + if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { + lastPetTimestamp = 0; + insertHat(); + } } + updateFeather(); } diff --git a/dist/obsidian/manifest.json b/dist/obsidian/manifest.json index 662f18c..ccb99fe 100644 --- a/dist/obsidian/manifest.json +++ b/dist/obsidian/manifest.json @@ -1,7 +1,7 @@ { "id": "pocket-bird", "name": "Pocket Bird", - "version": "2026.1.21", + "version": "2026.1.22", "minAppVersion": "0.15.0", "description": "Add a pet bird to fly around your notes and keep you company!", "author": "Idrees Hassan", diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index 15c2968..5166bdf 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Pocket Bird // @namespace https://idreesinc.com -// @version 2026.1.21 +// @version 2026.1.22 // @description It's a pet bird in your browser, what more could you want? // @author Idrees // @downloadURL https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/userscript/birb.user.js @@ -2052,7 +2052,8 @@ // Timing constants (in milliseconds) const UPDATE_INTERVAL = 1000 / 60; // 60 FPS - const AFK_TIME = isDebug() ? 0 : 1000 * 5; + const AFK_TIME = isDebug() ? 0 : 1000 * 5; // 5 seconds + const SUPER_AFK_TIME = 1000 * 60 * 60; // 1 hour const PET_MENU_COOLDOWN = 1000; const URL_CHECK_INTERVAL = 150; const HOP_DELAY = 500; @@ -2061,7 +2062,7 @@ const HOP_CHANCE = 1 / (60 * 2.5); // Every 2.5 seconds const FOCUS_SWITCH_CHANCE = 1 / (60 * 20); // Every 20 seconds const FEATHER_CHANCE = 1 / (60 * 60 * 60 * 2); // Every 2 hours - const HAT_CHANCE = 1 / 50; // Every 50 webpages + const HAT_CHANCE = 1 / (60 * 60 * 10); // Every 10 minutes // Feathers const FEATHER_FALL_SPEED = 1; @@ -2166,7 +2167,7 @@ insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem(() => `2026.1.21 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.21"); }, false), + new MenuItem(() => `2026.1.22 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.22"); }, false), ]; const styleElement = document.createElement("style"); @@ -2353,24 +2354,12 @@ log("Path changed from '" + lastPath + "' to '" + currentPath + "'"); lastPath = currentPath; drawStickyNotes(stickyNotes, save, deleteStickyNote); - determineHatUnlock(); } }, URL_CHECK_INTERVAL); setInterval(update, UPDATE_INTERVAL); focusOnElement(true); - - determineHatUnlock(); - } - - function determineHatUnlock() { - if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { - insertHat(); - } else if (location.hostname === "127.0.0.1") { - log("Inserting hat for debug purposes"); - insertHat(); - } } function update() { @@ -2403,12 +2392,17 @@ } } - // Double the chance of a feather if recently pet - const petMod = isPetBoostActive() ? PET_FEATHER_BOOST : 1; - if (birb.isVisible() && Math.random() < FEATHER_CHANCE * petMod) { - lastPetTimestamp = 0; - activateFeather(); + if (birb.isVisible() && Date.now() - lastActionTimestamp < SUPER_AFK_TIME) { + if (Math.random() < FEATHER_CHANCE * (isPetBoostActive() ? PET_FEATHER_BOOST : 1)) { + lastPetTimestamp = 0; + activateFeather(); + } + if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { + lastPetTimestamp = 0; + insertHat(); + } } + updateFeather(); } diff --git a/dist/web/birb.embed.js b/dist/web/birb.embed.js index 1ad390a..819856e 100644 --- a/dist/web/birb.embed.js +++ b/dist/web/birb.embed.js @@ -2032,7 +2032,8 @@ // Timing constants (in milliseconds) const UPDATE_INTERVAL = 1000 / 60; // 60 FPS - const AFK_TIME = isDebug() ? 0 : 1000 * 5; + const AFK_TIME = isDebug() ? 0 : 1000 * 5; // 5 seconds + const SUPER_AFK_TIME = 1000 * 60 * 60; // 1 hour const PET_MENU_COOLDOWN = 1000; const URL_CHECK_INTERVAL = 150; const HOP_DELAY = 500; @@ -2041,7 +2042,7 @@ const HOP_CHANCE = 1 / (60 * 2.5); // Every 2.5 seconds const FOCUS_SWITCH_CHANCE = 1 / (60 * 20); // Every 20 seconds const FEATHER_CHANCE = 1 / (60 * 60 * 60 * 2); // Every 2 hours - const HAT_CHANCE = 1 / 50; // Every 50 webpages + const HAT_CHANCE = 1 / (60 * 60 * 10); // Every 10 minutes // Feathers const FEATHER_FALL_SPEED = 1; @@ -2146,7 +2147,7 @@ insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem(() => `2026.1.21 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.21"); }, false), + new MenuItem(() => `2026.1.22 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.22"); }, false), ]; const styleElement = document.createElement("style"); @@ -2333,24 +2334,12 @@ log("Path changed from '" + lastPath + "' to '" + currentPath + "'"); lastPath = currentPath; drawStickyNotes(stickyNotes, save, deleteStickyNote); - determineHatUnlock(); } }, URL_CHECK_INTERVAL); setInterval(update, UPDATE_INTERVAL); focusOnElement(true); - - determineHatUnlock(); - } - - function determineHatUnlock() { - if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { - insertHat(); - } else if (location.hostname === "127.0.0.1") { - log("Inserting hat for debug purposes"); - insertHat(); - } } function update() { @@ -2383,12 +2372,17 @@ } } - // Double the chance of a feather if recently pet - const petMod = isPetBoostActive() ? PET_FEATHER_BOOST : 1; - if (birb.isVisible() && Math.random() < FEATHER_CHANCE * petMod) { - lastPetTimestamp = 0; - activateFeather(); + if (birb.isVisible() && Date.now() - lastActionTimestamp < SUPER_AFK_TIME) { + if (Math.random() < FEATHER_CHANCE * (isPetBoostActive() ? PET_FEATHER_BOOST : 1)) { + lastPetTimestamp = 0; + activateFeather(); + } + if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { + lastPetTimestamp = 0; + insertHat(); + } } + updateFeather(); } diff --git a/dist/web/birb.js b/dist/web/birb.js index 1ad390a..819856e 100644 --- a/dist/web/birb.js +++ b/dist/web/birb.js @@ -2032,7 +2032,8 @@ // Timing constants (in milliseconds) const UPDATE_INTERVAL = 1000 / 60; // 60 FPS - const AFK_TIME = isDebug() ? 0 : 1000 * 5; + const AFK_TIME = isDebug() ? 0 : 1000 * 5; // 5 seconds + const SUPER_AFK_TIME = 1000 * 60 * 60; // 1 hour const PET_MENU_COOLDOWN = 1000; const URL_CHECK_INTERVAL = 150; const HOP_DELAY = 500; @@ -2041,7 +2042,7 @@ const HOP_CHANCE = 1 / (60 * 2.5); // Every 2.5 seconds const FOCUS_SWITCH_CHANCE = 1 / (60 * 20); // Every 20 seconds const FEATHER_CHANCE = 1 / (60 * 60 * 60 * 2); // Every 2 hours - const HAT_CHANCE = 1 / 50; // Every 50 webpages + const HAT_CHANCE = 1 / (60 * 60 * 10); // Every 10 minutes // Feathers const FEATHER_FALL_SPEED = 1; @@ -2146,7 +2147,7 @@ insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem(() => `2026.1.21 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.21"); }, false), + new MenuItem(() => `2026.1.22 ${isPetBoostActive() ? "❤" : ""}`, () => { alert("Thank you for using Pocket Bird! You are on version: 2026.1.22"); }, false), ]; const styleElement = document.createElement("style"); @@ -2333,24 +2334,12 @@ log("Path changed from '" + lastPath + "' to '" + currentPath + "'"); lastPath = currentPath; drawStickyNotes(stickyNotes, save, deleteStickyNote); - determineHatUnlock(); } }, URL_CHECK_INTERVAL); setInterval(update, UPDATE_INTERVAL); focusOnElement(true); - - determineHatUnlock(); - } - - function determineHatUnlock() { - if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { - insertHat(); - } else if (location.hostname === "127.0.0.1") { - log("Inserting hat for debug purposes"); - insertHat(); - } } function update() { @@ -2383,12 +2372,17 @@ } } - // Double the chance of a feather if recently pet - const petMod = isPetBoostActive() ? PET_FEATHER_BOOST : 1; - if (birb.isVisible() && Math.random() < FEATHER_CHANCE * petMod) { - lastPetTimestamp = 0; - activateFeather(); + if (birb.isVisible() && Date.now() - lastActionTimestamp < SUPER_AFK_TIME) { + if (Math.random() < FEATHER_CHANCE * (isPetBoostActive() ? PET_FEATHER_BOOST : 1)) { + lastPetTimestamp = 0; + activateFeather(); + } + if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { + lastPetTimestamp = 0; + insertHat(); + } } + updateFeather(); } diff --git a/src/application.js b/src/application.js index 14ea0c6..c0ae3aa 100644 --- a/src/application.js +++ b/src/application.js @@ -99,7 +99,8 @@ const HOP_DISTANCE = 35; // Timing constants (in milliseconds) const UPDATE_INTERVAL = 1000 / 60; // 60 FPS -const AFK_TIME = isDebug() ? 0 : 1000 * 5; +const AFK_TIME = isDebug() ? 0 : 1000 * 5; // 5 seconds +const SUPER_AFK_TIME = 1000 * 60 * 60; // 1 hour const PET_MENU_COOLDOWN = 1000; const URL_CHECK_INTERVAL = 150; const HOP_DELAY = 500; @@ -108,7 +109,7 @@ const HOP_DELAY = 500; const HOP_CHANCE = 1 / (60 * 2.5); // Every 2.5 seconds const FOCUS_SWITCH_CHANCE = 1 / (60 * 20); // Every 20 seconds const FEATHER_CHANCE = 1 / (60 * 60 * 60 * 2); // Every 2 hours -const HAT_CHANCE = 1 / 50; // Every 50 webpages +const HAT_CHANCE = 1 / (60 * 60 * 10); // Every 10 minutes // Feathers const FEATHER_FALL_SPEED = 1; @@ -400,24 +401,12 @@ function startApplication(birbPixels, featherPixels, hatsPixels) { log("Path changed from '" + lastPath + "' to '" + currentPath + "'"); lastPath = currentPath; drawStickyNotes(stickyNotes, save, deleteStickyNote); - determineHatUnlock(); } }, URL_CHECK_INTERVAL); setInterval(update, UPDATE_INTERVAL); focusOnElement(true); - - determineHatUnlock(); - } - - function determineHatUnlock() { - if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { - insertHat(); - } else if (location.hostname === "127.0.0.1") { - log("Inserting hat for debug purposes"); - insertHat(); - } } function update() { @@ -450,12 +439,17 @@ function startApplication(birbPixels, featherPixels, hatsPixels) { } } - // Double the chance of a feather if recently pet - const petMod = isPetBoostActive() ? PET_FEATHER_BOOST : 1; - if (birb.isVisible() && Math.random() < FEATHER_CHANCE * petMod) { - lastPetTimestamp = 0; - activateFeather(); + if (birb.isVisible() && Date.now() - lastActionTimestamp < SUPER_AFK_TIME) { + if (Math.random() < FEATHER_CHANCE * (isPetBoostActive() ? PET_FEATHER_BOOST : 1)) { + lastPetTimestamp = 0; + activateFeather(); + } + if (Math.random() < (HAT_CHANCE * (isPetBoostActive() ? PET_HAT_BOOST : 1))) { + lastPetTimestamp = 0; + insertHat(); + } } + updateFeather(); }