From 17920344cc6d6237bcc18a28121ee4225854334d Mon Sep 17 00:00:00 2001 From: Albert Frengki <75172149+AlberttFrgk@users.noreply.github.com> Date: Thu, 28 May 2026 23:02:24 +0700 Subject: [PATCH 1/3] new: Hit Count by Albert --- counters/Hit Count by Albert/catch.png | Bin 0 -> 16074 bytes counters/Hit Count by Albert/index.html | 35 ++ counters/Hit Count by Albert/main.css | 109 +++++ counters/Hit Count by Albert/main.js | 472 +++++++++++++++++++++ counters/Hit Count by Albert/mania.png | Bin 0 -> 18246 bytes counters/Hit Count by Albert/metadata.txt | 7 + counters/Hit Count by Albert/osu.png | Bin 0 -> 13643 bytes counters/Hit Count by Albert/settings.json | 86 ++++ counters/Hit Count by Albert/taiko.png | Bin 0 -> 12781 bytes 9 files changed, 709 insertions(+) create mode 100644 counters/Hit Count by Albert/catch.png create mode 100644 counters/Hit Count by Albert/index.html create mode 100644 counters/Hit Count by Albert/main.css create mode 100644 counters/Hit Count by Albert/main.js create mode 100644 counters/Hit Count by Albert/mania.png create mode 100644 counters/Hit Count by Albert/metadata.txt create mode 100644 counters/Hit Count by Albert/osu.png create mode 100644 counters/Hit Count by Albert/settings.json create mode 100644 counters/Hit Count by Albert/taiko.png diff --git a/counters/Hit Count by Albert/catch.png b/counters/Hit Count by Albert/catch.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ac9fb4743f5235b0e5da715b2824e5a47ce2ac GIT binary patch literal 16074 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 WBfZK8$oO`kTuMw{v{YEv=YIj=x($^8 literal 0 HcmV?d00001 diff --git a/counters/Hit Count by Albert/index.html b/counters/Hit Count by Albert/index.html new file mode 100644 index 0000000..db2685c --- /dev/null +++ b/counters/Hit Count by Albert/index.html @@ -0,0 +1,35 @@ + + + + + + + + + +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/counters/Hit Count by Albert/main.css b/counters/Hit Count by Albert/main.css new file mode 100644 index 0000000..a620b11 --- /dev/null +++ b/counters/Hit Count by Albert/main.css @@ -0,0 +1,109 @@ +body, html { + padding: 0; + margin: 0; + overflow: hidden; + font-family: var(--main-font, Arial, sans-serif); +} + +#hitcount_box { + position: absolute; + top: 0; + left: 0; + transition: opacity 500ms ease-in-out; + opacity: 0; +} + +#countBox { + display: grid; + grid-template-columns: var(--label-width, 130px) 10px var(--val-width, 90px); + grid-auto-flow: dense; + line-height: var(--line-height, 1.25); + padding: 4px; +} + +#countBox.swapped { + grid-template-columns: var(--val-width, 90px) 10px var(--label-width, 140px); +} + +#countBox > div { + display: contents; +} + +#countBox > div.hidden { + display: none !important; +} + +.spacer { + display: block !important; + grid-column: 1 / -1; + height: 0.75em; +} + +.spacer.hidden { + display: none !important; +} + +.row-label, .row-val { + font-size: var(--scaled-font-size, 20pt); + white-space: nowrap; + color: inherit; + text-shadow: 1.5px 1.5px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; +} + +.row-label { + grid-column: 1; + text-align: left; + justify-self: start; +} + +.row-val { + grid-column: 3; + text-align: right; + justify-self: end; + font-variant-numeric: tabular-nums; +} + +.hidden { + display: none !important; +} + +/* Swapped State Modifiers */ +#countBox.swapped .row-label { + grid-column: 3; + text-align: right; + justify-self: end; +} + +#countBox.swapped .row-val { + grid-column: 1; + text-align: left; + justify-self: start; +} + +/* Specific Variable Map for Labels and Numbers */ +#pp .row-label { color: var(--color-pp-label); } +#pp .row-val { color: var(--color-pp-val); } +#ur .row-label { color: var(--color-ur-label); } +#ur .row-val { color: var(--color-ur-val); } +#ratio .row-label { color: var(--color-ratio-label); } +#ratio .row-val { color: var(--color-ratio-val); } +#maxCombo .row-label { color: var(--color-combo-label); } +#maxCombo .row-val { color: var(--color-combo-val); } + +#h300g .row-label { color: var(--color-300g-label); } +#h300g .row-val { color: var(--color-300g-val); } +#h300 .row-label { color: var(--color-300-label); } +#h300 .row-val { color: var(--color-300-val); } +#h200 .row-label { color: var(--color-200-label); } +#h200 .row-val { color: var(--color-200-val); } +#h100 .row-label { color: var(--color-100-label); } +#h100 .row-val { color: var(--color-100-val); } +#h50 .row-label { color: var(--color-50-label); } +#h50 .row-val { color: var(--color-50-val); } +#miss .row-label { color: var(--color-miss-label); } +#miss .row-val { color: var(--color-miss-val); } + +#earlyCount .row-label { color: var(--color-early-label); } +#earlyCount .row-val { color: var(--color-early-val); } +#lateCount .row-label { color: var(--color-late-label); } +#lateCount .row-val { color: var(--color-late-val); } \ No newline at end of file diff --git a/counters/Hit Count by Albert/main.js b/counters/Hit Count by Albert/main.js new file mode 100644 index 0000000..9460940 --- /dev/null +++ b/counters/Hit Count by Albert/main.js @@ -0,0 +1,472 @@ +class WebSocketManager { + constructor(host) { + this.host = host; + this.sockets = {}; + this.createConnection = this.createConnection.bind(this); + } + + createConnection(url, callback, filters) { + let interval; + const counterPath = window.COUNTER_PATH || ""; + const query = url.includes("?") ? `&l=${encodeURI(counterPath)}` : `?l=${encodeURI(counterPath)}`; + const fullUrl = `ws://${this.host}${url}${query}`; + this.sockets[url] = new WebSocket(fullUrl); + + this.sockets[url].onopen = () => { + if (interval) clearInterval(interval); + if (filters) this.sockets[url].send(`applyFilters:${JSON.stringify(filters)}`); + }; + + this.sockets[url].onclose = () => { + delete this.sockets[url]; + interval = setTimeout(() => this.createConnection(url, callback, filters), 1000); + }; + + this.sockets[url].onmessage = ({ data }) => { + if (!data) return; + try { + const parsed = JSON.parse(data); + if (parsed && typeof parsed === "object" && !("error" in parsed)) callback(parsed); + } catch (e) {} + }; + } + + api_v2(callback, filters) { this.createConnection("/websocket/v2", callback, filters); } + api_v2_precise(callback, filters) { this.createConnection("/websocket/v2/precise", callback, filters); } + commands(callback) { this.createConnection("/websocket/commands", callback); } + + sendCommand(name, command, retry = 1) { + const socket = this.sockets["/websocket/commands"]; + if (socket && socket.readyState === WebSocket.OPEN) { + socket.send(`${name}:${command}`); + } else if (retry <= 50) { + setTimeout(() => this.sendCommand(name, command, retry + 1), 100); + } + } +} + +const string = { + global: { pp: "PP", ur: "UR", ratio: "Ratio", combo: "Max Combo", early: "Early", late: "Late", miss: "Miss" }, + modes: { + mania: { h300g: "MAX", h300: "Perfect", h200: "Great", h100: "Good", h50: "Bad" }, + catch: { h300: "Fruit", h100: "Drop", h50: "Droplet" }, + fruits: { h300: "Fruit", h100: "Drop", h50: "Droplet" }, + taiko: { h300: "Great", h100: "Ok" }, + osu: { h300: "300", h100: "100", h50: "50" } + } +}; + +const getWindows = (mode, od, modsString = "") => { + let mOd = od; + if (mode === "mania") { + if (modsString.includes("EZ")) mOd = od * 0.5; + const hrMult = modsString.includes("HR") ? 5/7 : 1; + return [16, ((64 - 3 * mOd) * hrMult), ((97 - 3 * mOd) * hrMult), ((127 - 3 * mOd) * hrMult), ((151 - 3 * mOd) * hrMult)]; + } + + if (modsString.includes("EZ")) mOd = od / 2; + else if (modsString.includes("HR")) mOd = Math.min(od * 1.4, 10); + + if (mode === "taiko") return [(50 - 3 * mOd), (mOd >= 5 ? 119.5 - 8 * mOd : 110 - 6 * mOd), (mOd >= 5 ? 135 - 8 * mOd : 120 - 5 * mOd)]; + return [(80 - 6 * mOd), (140 - 8 * mOd), (200 - 10 * mOd)]; +}; + +function updateRow(element, label, value) { + if (element) element.innerHTML = `${label}${value}`; +} + +function distributeDelta(newTotal = 0, display, preciseTally, isMiss = false) { + const delta = newTotal - display.t; + if (delta <= 0) return; + + if (isMiss) { + const availableE = Math.max(0, preciseTally.e - display.e); + const addE = Math.min(delta, availableE); + display.e += addE; + display.l += (delta - addE); + } else { + const preciseTotal = preciseTally.e + preciseTally.l; + if (preciseTotal === 0) { + const half = Math.floor(delta / 2); + display.e += half; + display.l += (delta - half); + } else { + const expectedE = Math.round(newTotal * (preciseTally.e / preciseTotal)); + const addE = Math.max(0, Math.min(delta, expectedE - display.e)); + display.e += addE; + display.l += (delta - addE); + } + } + display.t = newTotal; +} + +function getRatioText(mode, hits) { + const h300g = hits.geki || 0, h300 = hits[300] || 0, h200 = hits.katu || 0, h100 = hits[100] || 0, h50 = hits[50] || 0, h0 = hits[0] || 0; + + if (mode === "mania") { + const total = h300g + h300 + h200 + h100 + h50 + h0; + if (total === 0) return "0:1"; + return (total - h300g) === 0 ? "∞:1" : `${(h300g / (total - h300g)).toFixed(1)}:1`; + } else { + const total = h300 + h100 + h50 + h0; + if (total === 0) return "0:1"; + const nonPerfect = h100 + h50 + h0; + return nonPerfect === 0 ? "∞:1" : `${(h300 / nonPerfect).toFixed(1)}:1`; + } +} + +function syncDeltaTallies(mode, hits) { + if (mode === "mania") { + distributeDelta(hits[300] || 0, displayTally.mania[0], hitTally.mania[0]); + distributeDelta(hits.katu || 0, displayTally.mania[1], hitTally.mania[1]); + distributeDelta(hits[100] || 0, displayTally.mania[2], hitTally.mania[2]); + distributeDelta(hits[50] || 0, displayTally.mania[3], hitTally.mania[3]); + distributeDelta(hits[0] || 0, displayTally.mania[4], hitTally.mania[4], true); + } else if (mode === "taiko") { + distributeDelta(hits[100] || 0, displayTally.taiko[0], hitTally.taiko[0]); + distributeDelta(hits[0] || 0, displayTally.taiko[1], hitTally.taiko[1], true); + } else { + distributeDelta(hits[100] || 0, displayTally.std[0], hitTally.std[0]); + distributeDelta(hits[50] || 0, displayTally.std[1], hitTally.std[1]); + distributeDelta(hits[0] || 0, displayTally.std[2], hitTally.std[2], true); + } +} + +function applyModeColors(mode, settings, fallback) { + const root = document.documentElement; + const applyHitCol = (prefix, labelVal, numVal) => { + root.style.setProperty(`--color-${prefix}-label`, settings.useCustomHitCountLabelColors ? (labelVal || fallback) : fallback); + root.style.setProperty(`--color-${prefix}-val`, settings.useCustomHitCountNumberColors ? (numVal || fallback) : fallback); + }; + + applyHitCol('miss', settings.colorMissLabel, settings.colorMissVal); + + if (mode === "osu") { + applyHitCol('300g', fallback, fallback); + applyHitCol('300', settings.colorOsu300Label, settings.colorOsu300Val); + applyHitCol('200', fallback, fallback); + applyHitCol('100', settings.colorOsu100Label, settings.colorOsu100Val); + applyHitCol('50', settings.colorOsu50Label, settings.colorOsu50Val); + } else if (mode === "taiko") { + applyHitCol('300g', fallback, fallback); + applyHitCol('300', settings.colorTaiko300Label, settings.colorTaiko300Val); + applyHitCol('200', fallback, fallback); + applyHitCol('100', settings.colorTaiko100Label, settings.colorTaiko100Val); + applyHitCol('50', fallback, fallback); + } else if (mode === "catch" || mode === "fruits") { + applyHitCol('300g', fallback, fallback); + applyHitCol('300', settings.colorCatch300Label, settings.colorCatch300Val); + applyHitCol('200', fallback, fallback); + applyHitCol('100', settings.colorCatch100Label, settings.colorCatch100Val); + applyHitCol('50', settings.colorCatch50Label, settings.colorCatch50Val); + } else { + applyHitCol('300g', settings.colorMania300gLabel, settings.colorMania300gVal); + applyHitCol('300', settings.colorMania300Label, settings.colorMania300Val); + applyHitCol('200', settings.colorMania200Label, settings.colorMania200Val); + applyHitCol('100', settings.colorMania100Label, settings.colorMania100Val); + applyHitCol('50', settings.colorMania50Label, settings.colorMania50Val); + } +} + +const toggleClass = (el, condition, className = "hidden") => { + if (el) condition ? el.classList.add(className) : el.classList.remove(className); +}; + +async function autoScaleFont() { + await document.fonts.ready; + + let measurer = document.getElementById("font-measurer"); + if (!measurer) { + measurer = document.createElement("span"); + measurer.id = "font-measurer"; + measurer.style.position = "absolute"; + measurer.style.visibility = "hidden"; + measurer.style.whiteSpace = "nowrap"; + measurer.style.fontSize = "20pt"; + document.body.appendChild(measurer); + } + + measurer.style.fontFamily = document.documentElement.style.getPropertyValue('--main-font'); + + const targetLabelW = settings .labelColumnWidth || 140; + const targetValW = settings .valueColumnWidth || 90; + + measurer.innerText = "Max Combo"; + const actualLabelW = measurer.offsetWidth || targetLabelW; + + measurer.innerText = "88888.8"; + const actualValW = measurer.offsetWidth || targetValW; + + const scaleLabel = targetLabelW / actualLabelW; + const scaleVal = targetValW / actualValW; + + const minScale = Math.min(scaleLabel, scaleVal, 1); + let finalSize = 20 * minScale; + + if (finalSize < 10) finalSize = 10; + + document.documentElement.style.setProperty('--scaled-font-size', `${finalSize}pt`); +} + +const wsManager = new WebSocketManager(window.location.host); + +const hitcountBox = document.getElementById("hitcount_box"); +const elPp = document.getElementById("pp"), elUr = document.getElementById("ur"), elRatio = document.getElementById("ratio"), elMaxCombo = document.getElementById("maxCombo"); +const elEarly = document.getElementById("earlyCount"), elLate = document.getElementById("lateCount"); +const el300g = document.getElementById("h300g"), el300 = document.getElementById("h300"), el200 = document.getElementById("h200"); +const el100 = document.getElementById("h100"), el50 = document.getElementById("h50"), elMiss = document.getElementById("miss"); +const brHits = document.getElementById("brHits"), brEarlyLate = document.getElementById("brEarlyLate"); + +let cache = { state: "", mode: "osu", od: 0, mods: "", processedHits: 0, curTotalHits: 0, lastTime: 0 }; +let hitTally = { + mania: [ {e:0, l:0}, {e:0, l:0}, {e:0, l:0}, {e:0, l:0}, {e:0, l:0} ], + taiko: [ {e:0, l:0}, {e:0, l:0} ], + std: [ {e:0, l:0}, {e:0, l:0}, {e:0, l:0} ] +}; +let displayTally = { + mania: [ {e:0, l:0, t:0}, {e:0, l:0, t:0}, {e:0, l:0, t:0}, {e:0, l:0, t:0}, {e:0, l:0, t:0} ], + taiko: [ {e:0, l:0, t:0}, {e:0, l:0, t:0} ], + std: [ {e:0, l:0, t:0}, {e:0, l:0, t:0}, {e:0, l:0, t:0} ] +}; + +let settings = { + labelColumnWidth: 130, valueColumnWidth: 90, lineHeight: 1.25, + fontName: "Arial", useCustomFont: false, customFontName: "font.ttf", + globalTextColor: "#ffffff", swapLabelValue: false, + hidePP: false, useCustomPPColors: false, colorPPLabel: "#ffffff", colorPPVal: "#ffffff", + hideUR: false, useCustomURColors: false, colorURLabel: "#ffffff", colorURVal: "#ffffff", + hideRatio: false, useCustomRatioColors: false, colorRatioLabel: "#ffffff", colorRatioVal: "#ffffff", + hideMaxCombo: false, useCustomComboColors: false, colorComboLabel: "#ffffff", colorComboVal: "#ffffff", + hideHitCounts: false, useCustomHitCountLabelColors: true, useCustomHitCountNumberColors: false, + colorOsu300Label: "#50b4ff", colorOsu300Val: "#50b4ff", colorOsu100Label: "#47e547", colorOsu100Val: "#47e547", colorOsu50Label: "#ffcc22", colorOsu50Val: "#ffcc22", + colorTaiko300Label: "#ffcc22", colorTaiko300Val: "#ffcc22", colorTaiko100Label: "#47e547", colorTaiko100Val: "#47e547", + colorCatch300Label: "#ffcc22", colorCatch300Val: "#ffcc22", colorCatch100Label: "#47e547", colorCatch100Val: "#47e547", colorCatch50Label: "#50b4ff", colorCatch50Val: "#50b4ff", + colorMania300gLabel: "#ffffff", colorMania300gVal: "#ffffff", colorMania300Label: "#ffcc22", colorMania300Val: "#ffcc22", colorMania200Label: "#47e547", colorMania200Val: "#47e547", colorMania100Label: "#50b4ff", colorMania100Val: "#50b4ff", colorMania50Label: "#888888", colorMania50Val: "#888888", + colorMissLabel: "#ff0000", colorMissVal: "#ff0000", + hideEarlyLate: false, useCustomEarlyLateColors: true, colorEarlyLabel: "#0000ff", colorEarlyVal: "#ffffff", colorLateLabel: "#ff0000", colorLateVal: "#ffffff" +}; + +wsManager.commands((data) => { + try { + if (data.command !== "getSettings") return; + Object.assign(settings , data.message); + applySettingsToUI(); + } catch (e) {} +}); + +wsManager.sendCommand("getSettings", window.COUNTER_PATH ? encodeURI(window.COUNTER_PATH) : ""); + +function applySettingsToUI() { + const root = document.documentElement; + const g = settings .globalTextColor || "#ffffff"; + const mode = cache.mode || "osu"; + + root.style.setProperty('--label-width', `${settings .labelColumnWidth || 140}px`); + root.style.setProperty('--val-width', `${settings .valueColumnWidth || 90}px`); + root.style.setProperty('--line-height', settings .lineHeight || 1.25); + + let fontStyle = document.getElementById("custom-font-style"); + const systemFont = settings .fontName ? `"${settings .fontName}", sans-serif` : "Arial, sans-serif"; + + if (settings .useCustomFont && settings .customFontName) { + if (!fontStyle) { + fontStyle = document.createElement("style"); + fontStyle.id = "custom-font-style"; + document.head.appendChild(fontStyle); + } + fontStyle.innerHTML = ` + @font-face { + font-family: 'CustomOverlayFont'; + src: url('./${settings .customFontName}'); + } + `; + root.style.setProperty('--main-font', `'CustomOverlayFont', ${systemFont}`); + } else { + if (fontStyle) fontStyle.innerHTML = ""; + root.style.setProperty('--main-font', systemFont); + } + + toggleClass(document.getElementById("countBox"), settings .swapLabelValue, "swapped"); + + toggleClass(elPp, settings .hidePP); + toggleClass(elUr, settings .hideUR); + toggleClass(elRatio, settings .hideRatio); + toggleClass(elMaxCombo, settings .hideMaxCombo); + + if (settings .hideHitCounts) { + [el300g, el300, el200, el100, el50, elMiss, brHits].forEach(el => toggleClass(el, true)); + } else { + toggleClass(elMiss, false); toggleClass(brHits, false); + } + + const hideEL = settings .hideEarlyLate; + [elEarly, elLate, brEarlyLate].forEach(el => toggleClass(el, hideEL)); + + const applyStatColor = (labelProp, valProp, condition, lCol, vCol) => { + root.style.setProperty(labelProp, condition ? (lCol || g) : g); + root.style.setProperty(valProp, condition ? (vCol || g) : g); + }; + + applyStatColor('--color-pp-label', '--color-pp-val', settings .useCustomPPColors, settings .colorPPLabel, settings .colorPPVal); + applyStatColor('--color-ur-label', '--color-ur-val', settings .useCustomURColors, settings .colorURLabel, settings .colorURVal); + applyStatColor('--color-ratio-label', '--color-ratio-val', settings .useCustomRatioColors, settings .colorRatioLabel, settings .colorRatioVal); + applyStatColor('--color-combo-label', '--color-combo-val', settings .useCustomComboColors, settings .colorComboLabel, settings .colorComboVal); + applyStatColor('--color-early-label', '--color-early-val', settings .useCustomEarlyLateColors, settings .colorEarlyLabel, settings .colorEarlyVal); + applyStatColor('--color-late-label', '--color-late-val', settings .useCustomEarlyLateColors, settings .colorLateLabel, settings .colorLateVal); + + applyModeColors(mode, settings , g); + + autoScaleFont(); +} + +function resetCounters() { + if (!settings .hideUR) updateRow(elUr, string.global.ur, "0.00"); + if (!settings .hideRatio) updateRow(elRatio, string.global.ratio, "0:1"); + if (!settings .hideEarlyLate) { updateRow(elEarly, string.global.early, "0"); updateRow(elLate, string.global.late, "0"); } + + hitTally.mania.forEach(t => { t.e = 0; t.l = 0; }); hitTally.taiko.forEach(t => { t.e = 0; t.l = 0; }); hitTally.std.forEach(t => { t.e = 0; t.l = 0; }); + displayTally.mania.forEach(t => { t.e = 0; t.l = 0; t.t = 0; }); displayTally.taiko.forEach(t => { t.e = 0; t.l = 0; t.t = 0; }); displayTally.std.forEach(t => { t.e = 0; t.l = 0; t.t = 0; }); + cache.processedHits = 0; cache.curTotalHits = 0; +} + +wsManager.api_v2((data) => { + if (!data.state?.name) return; + const state = data.state.name; + + if (cache.state !== state) { + if (hitcountBox) hitcountBox.style.opacity = (state === "play") ? 1 : 0; + if (state !== "play") resetCounters(); + } + + if (!settings .hidePP) { + const ppValue = (state === 'play' || state === 'resultScreen') ? (data.play?.pp?.current || 0) : (data.performance?.pp?.current || data.play?.pp?.current || 0); + updateRow(elPp, string.global.pp, Math.round(ppValue) + 'pp'); + } + + if (state === "play") { + const mode = data.play?.mode?.name ?? cache.mode; + + if (!settings .hideMaxCombo) updateRow(elMaxCombo, string.global.combo, data.play?.combo?.max || 0); + + let od = cache.od; + if (data.beatmap?.stats?.od !== undefined) { + od = (typeof data.beatmap.stats.od === "object" && data.beatmap.stats.od.original !== undefined) ? data.beatmap.stats.od.original : data.beatmap.stats.od; + } + + let mods = cache.mods; + if (data.play?.mods) { + mods = (typeof data.play.mods === "string") ? data.play.mods : (typeof data.play.mods.name === "string" ? data.play.mods.name : data.play.mods.join("")); + } + + if (cache.mode !== mode || cache.od !== od || cache.mods !== mods) { + cache.mode = mode; cache.od = od; cache.mods = mods; + cache.windows = getWindows(cache.mode, cache.od, cache.mods); + resetCounters(); + applySettingsToUI(); + } + + const hits = data.play?.hits || {}; + const modeLabels = string.modes[mode] || string.modes.osu; + + const updateHitRow = (el, key, val) => { + if (settings .hideHitCounts) { toggleClass(el, true); return; } + if (modeLabels[key]) { toggleClass(el, false); updateRow(el, modeLabels[key], val); } + else { toggleClass(el, true); } + }; + + updateHitRow(el300g, 'h300g', hits.geki || 0); + updateHitRow(el300, 'h300', hits[300] || 0); + updateHitRow(el200, 'h200', hits.katu || 0); + updateHitRow(el100, 'h100', hits[100] || 0); + updateHitRow(el50, 'h50', hits[50] || 0); + + if (!settings .hideHitCounts) updateRow(elMiss, string.global.miss, hits[0] || 0); + if (!settings .hideRatio) updateRow(elRatio, string.global.ratio, getRatioText(mode, hits)); + + const isCatch = (mode === "catch" || mode === "fruits"); + const hideEL = isCatch || settings .hideEarlyLate; + [elEarly, elLate, brEarlyLate].forEach(el => toggleClass(el, hideEL)); + + const totalHits = (hits.geki || 0) + (hits[300] || 0) + (hits.katu || 0) + (hits[100] || 0) + (hits[50] || 0) + (hits[0] || 0); + if (totalHits === 0 && cache.curTotalHits > 0) resetCounters(); + + if (totalHits >= cache.curTotalHits) { + cache.curTotalHits = totalHits; + syncDeltaTallies(mode, hits); + + if (!hideEL) { + let totalEarly = 0, totalLate = 0; + const currentTallyArr = mode === "mania" ? displayTally.mania : (mode === "taiko" ? displayTally.taiko : displayTally.std); + currentTallyArr.forEach(t => { totalEarly += t.e; totalLate += t.l; }); + updateRow(elEarly, string.global.early, totalEarly); + updateRow(elLate, string.global.late, totalLate); + } + } + } + cache.state = state; +}); + +wsManager.api_v2_precise((data) => { + if (cache.state !== "play") return; + const hitErrors = data.hitErrors || []; + + if (data.currentTime < (cache.lastTime || 0) - 50) { + resetCounters(); cache.lastTime = data.currentTime; cache.processedHits = hitErrors.length; return; + } + cache.lastTime = data.currentTime; + + if (hitErrors.length < cache.processedHits) { + if (hitErrors.length === 0 || (cache.processedHits - hitErrors.length > 5)) { + resetCounters(); cache.processedHits = hitErrors.length; + } + return; + } + + if (hitErrors.length > cache.processedHits) { + const newHits = hitErrors.slice(cache.processedHits); + cache.processedHits = hitErrors.length; + const mode = cache.mode, windows = cache.windows; + + newHits.forEach(ms => { + const msAbs = Math.abs(ms); + const isEarly = ms < 0; + + if (mode === "mania") { + const t = hitTally.mania; + if (msAbs <= windows[0]) {} + else if (msAbs <= windows[1]) { isEarly ? t[0].e++ : t[0].l++; } + else if (msAbs <= windows[2]) { isEarly ? t[1].e++ : t[1].l++; } + else if (msAbs <= windows[3]) { isEarly ? t[2].e++ : t[2].l++; } + else if (msAbs <= windows[4]) { isEarly ? t[3].e++ : t[3].l++; } + else { isEarly ? t[4].e++ : t[4].l++; } + } else if (mode === "taiko") { + const t = hitTally.taiko; + if (msAbs <= windows[0]) {} + else if (msAbs <= windows[1]) { isEarly ? t[0].e++ : t[0].l++; } + else { isEarly ? t[1].e++ : t[1].l++; } + } else { + const t = hitTally.std; + if (msAbs <= windows[0]) {} + else if (msAbs <= windows[1]) { isEarly ? t[0].e++ : t[0].l++; } + else if (msAbs <= windows[2]) { isEarly ? t[1].e++ : t[1].l++; } + else { isEarly ? t[2].e++ : t[2].l++; } + } + }); + } + + if (!settings .hideUR) { + if (hitErrors.length > 0) { + let sum = 0, sumSq = 0; + const len = hitErrors.length; + for (let i = 0; i < len; i++) { + sum += hitErrors[i]; + sumSq += hitErrors[i] * hitErrors[i]; + } + const mean = sum / len; + const ur = Math.sqrt((sumSq / len) - (mean * mean)) * 10; + updateRow(elUr, string.global.ur, ur.toFixed(2)); + } else { + updateRow(elUr, string.global.ur, "0.00"); + } + } +}); \ No newline at end of file diff --git a/counters/Hit Count by Albert/mania.png b/counters/Hit Count by Albert/mania.png new file mode 100644 index 0000000000000000000000000000000000000000..7401f4e0452c233c1556e9f9b3f58b1dacf09c1e GIT binary patch literal 18246 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 DN>g(Q literal 0 HcmV?d00001 diff --git a/counters/Hit Count by Albert/metadata.txt b/counters/Hit Count by Albert/metadata.txt new file mode 100644 index 0000000..bbf69fa --- /dev/null +++ b/counters/Hit Count by Albert/metadata.txt @@ -0,0 +1,7 @@ + Usecase: Ingame Overlay, OBS Overlay +Name: Hit Count +Version: 1.0.0 +Author: Albert +CompatibleWith: Tosu +Resolution: 240x400 +authorLinks: https://github.com/AlberttFrgk/ \ No newline at end of file diff --git a/counters/Hit Count by Albert/osu.png b/counters/Hit Count by Albert/osu.png new file mode 100644 index 0000000000000000000000000000000000000000..5711a7d2c14d00c23d714b1b492ac7d63edff3bd GIT binary patch literal 13643 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�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

w_=xDrZ%6}k2+_IVa+SO20%;!0}dz`NzZ`h z=^!_u{7v1XXo`D0b(4}qD(#Ca_Ug?29R@@kmv-JZrup~s#E~B*?Nwve<)cNwb}rS3R^LLm zxJ3BO-6!+mR4(-TAmI`@AsZNN9eZw_Z_9m{_}uwk@9}lGFm3prDE7TU!*l-%G8HqTtjBnl@d3r@8m2RY_@%`r#Z2u0KVu6&?LKq%p~oihE}5{~8S>4T z4r#k&Y0I9PzrQicKSqN;M^Qoat-D@|%1}j)N2Dy{GWzGmJ$Y%?4T70-vav)gAZ=Ts zk^1mv!U8nGI}>*G^V^5Gk!=DcFfe@2*3YK&inPkCjtMwomhT%ur?Yyqc|7}gu6|br z>6#F`VGNK+J`7KoAF)hnoqzY$yx9=RIPjZ<+sl8p6LuCS+1K(kuztbBHqT z^jmY)2s*^mEA~CG#vhy}XIQ-ZiNpDvSf03AGBQ%|`da}WyGRaH(Iyg||* z-XKC2jwNi8uD!WtuGdTQ6hEX`Cr`_+!RAOuX0tbq6OvCv9qx8m z&s@x0{*k*S-?yMLPFScx6q|{PPy^(7Zn|fTu2&bGIgxva=Lk)j=>#fx(?kp&g?^ag zpS0u{B@_6uR*GJ9vts-HUm{f0x8GwviJBpay;`@zOjZVVH5LX6r^DTOBfwV84IMY( zdur&Vd52aGxZOUPIu1R%QG2DX!KI+So-CkJW09CfU1ZPuMG?xnn9JI>t?u%A8Ai!O zxS-mW0#yXwdMLxyk)}GgBS{vcP$?*qa93S1g>I3zOQB_y2{3Mlz08aHuDkugZQtRA7uL;$(&;21w2JA$?#%P=j!k_MdG!x zB9k9Bte3wcGWqSC?g!~}tXYA*h*=T`k`)FgE5>x6;9gZ}=T;bzDlkaTA|TEuGpZap zMg&PX+UoA2)oY8HaVYV=ewjW|4XcNy6_Y_I?!3sYnnZ%$he)-PhWs7exOYqjbwgyF z?CVQ~TPX7Aa09HKvlqMdTD4&coR!?#uK4YK)#=k_tG!(Fw0D(_@Yng_31S+<%~U6b zm@A`n4XNKXAUon$%-y`G@@FilX-0`Jy_C1&IwmG$>#)Uilf2mW?C>t!b7djvE^X&kgMRkfN&=Q2UJF_TrFfg zLox&t(PzhyLjb-lZExr(AViD2eq^O)k&)HxcxIThbpImr{e^M+R3g~9tbC4H+#9Qy z)0-(hVzZQ(x3kpOVWQ04D*Jko(8Ow-;&*qZ;ZF4bCLgJpI~*9sX9-1C_rB`a$fd+- z>#;>}MBHC?W&)}-`Yy%=UY?>tMZ)nF8|9D;Mv2d<-?4@h5+TuGN@BGTV0PHZ3+xI%Ptun5rdalI^2pkqNvs-kTqSg`_iJXX=Sdab-%~a z`=6+{kscG=?Qa=xk)J?2ic{rtEa&o)m_DVM|FHi?Nf8r#rlSTm9$Bw0{iW0x+j19b z!P~7oP2uf3QtMt$7;|;4Mrn2>%tP0H^DsIU#;8{qxWB03i9dVU2 z^U2!N=wD|5863vuv`Qi$2R-Nil|T-as{$YT5An{Z2T+9{bF4C8zmt`$JL==9Mpy|q ziPk;9f(qWO+C-^Mhb$F%P{MyfJwm%g5W^uGLcByuqYFWN>Je5ki`U3J)GBNyv+zG5BXHJd!%!l*!Hf<(^f|%px0_cD2#qBT2Om zHHi&(bcF6`uQ}?hzt|Q{&T*1l0g@AEU(ZZd5N+3|X^7B`AUPHcIeKb;?0{K$eSrnP zUK8#X?{?iP0J|%AbA3u8jTJVnqKSX*H}{tzh7=4s(g&_Ma^;PzyBcun5JNgL%*r=) z;}c^#QAao2L07g0;8DfCxI$}`S4ILzh(0>;){h#2o0*8$NCwN3Qn`7KYBg2V Date: Mon, 1 Jun 2026 12:13:49 +0700 Subject: [PATCH 2/3] fix: websocket filter --- counters/Hit Count by Albert/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counters/Hit Count by Albert/main.js b/counters/Hit Count by Albert/main.js index 9460940..56c710f 100644 --- a/counters/Hit Count by Albert/main.js +++ b/counters/Hit Count by Albert/main.js @@ -469,4 +469,4 @@ wsManager.api_v2_precise((data) => { updateRow(elUr, string.global.ur, "0.00"); } } -}); \ No newline at end of file +}); From 638def8d974756e5240ea7c9a005acef60333774 Mon Sep 17 00:00:00 2001 From: Albert Frengki <75172149+AlberttFrgk@users.noreply.github.com> Date: Mon, 1 Jun 2026 12:21:36 +0700 Subject: [PATCH 3/3] idk why it didn't update --- counters/Hit Count by Albert/main.js | 74 ++++++++++++++-------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/counters/Hit Count by Albert/main.js b/counters/Hit Count by Albert/main.js index 56c710f..6dcc058 100644 --- a/counters/Hit Count by Albert/main.js +++ b/counters/Hit Count by Albert/main.js @@ -188,8 +188,8 @@ async function autoScaleFont() { measurer.style.fontFamily = document.documentElement.style.getPropertyValue('--main-font'); - const targetLabelW = settings .labelColumnWidth || 140; - const targetValW = settings .valueColumnWidth || 90; + const targetLabelW = settings.labelColumnWidth || 140; + const targetValW = settings.valueColumnWidth || 90; measurer.innerText = "Max Combo"; const actualLabelW = measurer.offsetWidth || targetLabelW; @@ -229,7 +229,7 @@ let displayTally = { std: [ {e:0, l:0, t:0}, {e:0, l:0, t:0}, {e:0, l:0, t:0} ] }; -let settings = { +let settings = { labelColumnWidth: 130, valueColumnWidth: 90, lineHeight: 1.25, fontName: "Arial", useCustomFont: false, customFontName: "font.ttf", globalTextColor: "#ffffff", swapLabelValue: false, @@ -249,7 +249,7 @@ let settings = { wsManager.commands((data) => { try { if (data.command !== "getSettings") return; - Object.assign(settings , data.message); + Object.assign(settings, data.message); applySettingsToUI(); } catch (e) {} }); @@ -258,17 +258,17 @@ wsManager.sendCommand("getSettings", window.COUNTER_PATH ? encodeURI(window.COUN function applySettingsToUI() { const root = document.documentElement; - const g = settings .globalTextColor || "#ffffff"; + const g = settings.globalTextColor || "#ffffff"; const mode = cache.mode || "osu"; - root.style.setProperty('--label-width', `${settings .labelColumnWidth || 140}px`); - root.style.setProperty('--val-width', `${settings .valueColumnWidth || 90}px`); - root.style.setProperty('--line-height', settings .lineHeight || 1.25); + root.style.setProperty('--label-width', `${settings.labelColumnWidth || 140}px`); + root.style.setProperty('--val-width', `${settings.valueColumnWidth || 90}px`); + root.style.setProperty('--line-height', settings.lineHeight || 1.25); let fontStyle = document.getElementById("custom-font-style"); - const systemFont = settings .fontName ? `"${settings .fontName}", sans-serif` : "Arial, sans-serif"; + const systemFont = settings.fontName ? `"${settings.fontName}", sans-serif` : "Arial, sans-serif"; - if (settings .useCustomFont && settings .customFontName) { + if (settings.useCustomFont && settings.customFontName) { if (!fontStyle) { fontStyle = document.createElement("style"); fontStyle.id = "custom-font-style"; @@ -277,7 +277,7 @@ function applySettingsToUI() { fontStyle.innerHTML = ` @font-face { font-family: 'CustomOverlayFont'; - src: url('./${settings .customFontName}'); + src: url('./${settings.customFontName}'); } `; root.style.setProperty('--main-font', `'CustomOverlayFont', ${systemFont}`); @@ -286,20 +286,20 @@ function applySettingsToUI() { root.style.setProperty('--main-font', systemFont); } - toggleClass(document.getElementById("countBox"), settings .swapLabelValue, "swapped"); + toggleClass(document.getElementById("countBox"), settings.swapLabelValue, "swapped"); - toggleClass(elPp, settings .hidePP); - toggleClass(elUr, settings .hideUR); - toggleClass(elRatio, settings .hideRatio); - toggleClass(elMaxCombo, settings .hideMaxCombo); + toggleClass(elPp, settings.hidePP); + toggleClass(elUr, settings.hideUR); + toggleClass(elRatio, settings.hideRatio); + toggleClass(elMaxCombo, settings.hideMaxCombo); - if (settings .hideHitCounts) { + if (settings.hideHitCounts) { [el300g, el300, el200, el100, el50, elMiss, brHits].forEach(el => toggleClass(el, true)); } else { toggleClass(elMiss, false); toggleClass(brHits, false); } - const hideEL = settings .hideEarlyLate; + const hideEL = settings.hideEarlyLate; [elEarly, elLate, brEarlyLate].forEach(el => toggleClass(el, hideEL)); const applyStatColor = (labelProp, valProp, condition, lCol, vCol) => { @@ -307,22 +307,22 @@ function applySettingsToUI() { root.style.setProperty(valProp, condition ? (vCol || g) : g); }; - applyStatColor('--color-pp-label', '--color-pp-val', settings .useCustomPPColors, settings .colorPPLabel, settings .colorPPVal); - applyStatColor('--color-ur-label', '--color-ur-val', settings .useCustomURColors, settings .colorURLabel, settings .colorURVal); - applyStatColor('--color-ratio-label', '--color-ratio-val', settings .useCustomRatioColors, settings .colorRatioLabel, settings .colorRatioVal); - applyStatColor('--color-combo-label', '--color-combo-val', settings .useCustomComboColors, settings .colorComboLabel, settings .colorComboVal); - applyStatColor('--color-early-label', '--color-early-val', settings .useCustomEarlyLateColors, settings .colorEarlyLabel, settings .colorEarlyVal); - applyStatColor('--color-late-label', '--color-late-val', settings .useCustomEarlyLateColors, settings .colorLateLabel, settings .colorLateVal); + applyStatColor('--color-pp-label', '--color-pp-val', settings.useCustomPPColors, settings.colorPPLabel, settings.colorPPVal); + applyStatColor('--color-ur-label', '--color-ur-val', settings.useCustomURColors, settings.colorURLabel, settings.colorURVal); + applyStatColor('--color-ratio-label', '--color-ratio-val', settings.useCustomRatioColors, settings.colorRatioLabel, settings.colorRatioVal); + applyStatColor('--color-combo-label', '--color-combo-val', settings.useCustomComboColors, settings.colorComboLabel, settings.colorComboVal); + applyStatColor('--color-early-label', '--color-early-val', settings.useCustomEarlyLateColors, settings.colorEarlyLabel, settings.colorEarlyVal); + applyStatColor('--color-late-label', '--color-late-val', settings.useCustomEarlyLateColors, settings.colorLateLabel, settings.colorLateVal); - applyModeColors(mode, settings , g); + applyModeColors(mode, settings, g); autoScaleFont(); } function resetCounters() { - if (!settings .hideUR) updateRow(elUr, string.global.ur, "0.00"); - if (!settings .hideRatio) updateRow(elRatio, string.global.ratio, "0:1"); - if (!settings .hideEarlyLate) { updateRow(elEarly, string.global.early, "0"); updateRow(elLate, string.global.late, "0"); } + if (!settings.hideUR) updateRow(elUr, string.global.ur, "0.00"); + if (!settings.hideRatio) updateRow(elRatio, string.global.ratio, "0:1"); + if (!settings.hideEarlyLate) { updateRow(elEarly, string.global.early, "0"); updateRow(elLate, string.global.late, "0"); } hitTally.mania.forEach(t => { t.e = 0; t.l = 0; }); hitTally.taiko.forEach(t => { t.e = 0; t.l = 0; }); hitTally.std.forEach(t => { t.e = 0; t.l = 0; }); displayTally.mania.forEach(t => { t.e = 0; t.l = 0; t.t = 0; }); displayTally.taiko.forEach(t => { t.e = 0; t.l = 0; t.t = 0; }); displayTally.std.forEach(t => { t.e = 0; t.l = 0; t.t = 0; }); @@ -338,7 +338,7 @@ wsManager.api_v2((data) => { if (state !== "play") resetCounters(); } - if (!settings .hidePP) { + if (!settings.hidePP) { const ppValue = (state === 'play' || state === 'resultScreen') ? (data.play?.pp?.current || 0) : (data.performance?.pp?.current || data.play?.pp?.current || 0); updateRow(elPp, string.global.pp, Math.round(ppValue) + 'pp'); } @@ -346,7 +346,7 @@ wsManager.api_v2((data) => { if (state === "play") { const mode = data.play?.mode?.name ?? cache.mode; - if (!settings .hideMaxCombo) updateRow(elMaxCombo, string.global.combo, data.play?.combo?.max || 0); + if (!settings.hideMaxCombo) updateRow(elMaxCombo, string.global.combo, data.play?.combo?.max || 0); let od = cache.od; if (data.beatmap?.stats?.od !== undefined) { @@ -369,7 +369,7 @@ wsManager.api_v2((data) => { const modeLabels = string.modes[mode] || string.modes.osu; const updateHitRow = (el, key, val) => { - if (settings .hideHitCounts) { toggleClass(el, true); return; } + if (settings.hideHitCounts) { toggleClass(el, true); return; } if (modeLabels[key]) { toggleClass(el, false); updateRow(el, modeLabels[key], val); } else { toggleClass(el, true); } }; @@ -380,11 +380,11 @@ wsManager.api_v2((data) => { updateHitRow(el100, 'h100', hits[100] || 0); updateHitRow(el50, 'h50', hits[50] || 0); - if (!settings .hideHitCounts) updateRow(elMiss, string.global.miss, hits[0] || 0); - if (!settings .hideRatio) updateRow(elRatio, string.global.ratio, getRatioText(mode, hits)); + if (!settings.hideHitCounts) updateRow(elMiss, string.global.miss, hits[0] || 0); + if (!settings.hideRatio) updateRow(elRatio, string.global.ratio, getRatioText(mode, hits)); const isCatch = (mode === "catch" || mode === "fruits"); - const hideEL = isCatch || settings .hideEarlyLate; + const hideEL = isCatch || settings.hideEarlyLate; [elEarly, elLate, brEarlyLate].forEach(el => toggleClass(el, hideEL)); const totalHits = (hits.geki || 0) + (hits[300] || 0) + (hits.katu || 0) + (hits[100] || 0) + (hits[50] || 0) + (hits[0] || 0); @@ -404,7 +404,7 @@ wsManager.api_v2((data) => { } } cache.state = state; -}); +}, ["state", { field: "play", keys: ["mode", "mods", "hits", "combo", "pp"] }, { field: "beatmap", keys: ["stats"] }, { field: "performance", keys: ["pp"] }]); wsManager.api_v2_precise((data) => { if (cache.state !== "play") return; @@ -454,7 +454,7 @@ wsManager.api_v2_precise((data) => { }); } - if (!settings .hideUR) { + if (!settings.hideUR) { if (hitErrors.length > 0) { let sum = 0, sumSq = 0; const len = hitErrors.length; @@ -469,4 +469,4 @@ wsManager.api_v2_precise((data) => { updateRow(elUr, string.global.ur, "0.00"); } } -}); +}, ["hitErrors", "currentTime"]); \ No newline at end of file