aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstonedDiscord <Tukz@gmx.de>2026-02-03 20:13:24 +0100
committerstonedDiscord <Tukz@gmx.de>2026-02-03 20:13:24 +0100
commit8681daf84b118a3760900bb8781c45a94339c685 (patch)
tree05ee5ebf2b48694b9aec38447c063476ad4e4da3
parent7391a61b881af5a515abfbf5905f65e749814fa4 (diff)
p
-rw-r--r--webAO/viewport/viewport.ts29
1 files changed, 27 insertions, 2 deletions
diff --git a/webAO/viewport/viewport.ts b/webAO/viewport/viewport.ts
index c03d750..b02828c 100644
--- a/webAO/viewport/viewport.ts
+++ b/webAO/viewport/viewport.ts
@@ -176,10 +176,17 @@ const viewport = (): Viewport => {
gamewindow.style.removeProperty("animation");
};
+ const pause = async (digits?: string) => {
+ // Default to 100ms if no number specified
+ const multiplier = !digits || digits === "" ? 1 : parseInt(digits, 10) || 1;
+ await delay(multiplier * 100);
+ };
+
const commands = new Map(
Object.entries({
s: shake,
f: flash,
+ p: pause,
}),
);
const textSpeeds = new Set(["{", "}"]);
@@ -208,10 +215,28 @@ const viewport = (): Viewport => {
if (
characterElement.innerHTML === COMMAND_IDENTIFIER &&
- commands.has(nextCharacterElement?.innerHTML)
+ (commands.has(nextCharacterElement?.innerHTML) ||
+ nextCharacterElement?.innerHTML === "p")
) {
textnow = chatmsg.content.substring(0, textnow.length + 1);
- await commands.get(nextCharacterElement.innerHTML)();
+ const commandChar = nextCharacterElement.innerHTML;
+
+ if (commandChar === "p") {
+ // Collect digits after \p for pause duration
+ let digits = "";
+ let offset = 1;
+ while (
+ textnow.length + offset <= chatmsg.content.length &&
+ /\d/.test(chatmsg.parsed[textnow.length + offset - 1]?.innerHTML || "")
+ ) {
+ digits += chatmsg.parsed[textnow.length + offset - 1].innerHTML;
+ textnow = chatmsg.content.substring(0, textnow.length + 1);
+ offset++;
+ }
+ await pause(digits);
+ } else {
+ await commands.get(commandChar)();
+ }
} else {
chatBoxInner.appendChild(chatmsg.parsed[textnow.length - 1]);
}