aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOsmium Sorcerer <os@sof.beauty>2026-03-16 15:59:07 +0000
committerOsmium Sorcerer <os@sof.beauty>2026-04-18 16:52:22 +0000
commit4dc891716ba6fb33dc35e9908283c1b6b9755efd (patch)
treefab1571a136ff3b3d835ca1f97a83a44f032193a
parentd50050b262d142eed8b61f58738884687f52440e (diff)
Remove hardcoded (a) and (b) emote subdirectories
Note: this is an old commit that was relevant prior to 10b413c ("Add asset preloading system for IC message rendering") WebAO assumes every character has an idle and talking animations which reside in fixed "(a)" and "(b)" subdirectories. This assumption, of course, breaks many valid characters that don't use these magical directory names, as it prepends them to every emote URL. This commit removes this fossil. Animation, or any character structure at all, shouldn't depend on magical subdirectory names, and instead defined explicitly.
-rw-r--r--webAO/client/setEmote.ts5
-rw-r--r--webAO/viewport/utils/preloadMessageAssets.ts11
-rw-r--r--webAO/viewport/viewport.ts10
3 files changed, 12 insertions, 14 deletions
diff --git a/webAO/client/setEmote.ts b/webAO/client/setEmote.ts
index 4c05afc..7e4a1d4 100644
--- a/webAO/client/setEmote.ts
+++ b/webAO/client/setEmote.ts
@@ -12,7 +12,6 @@ const setEmote = async (
client: Client,
charactername: string,
emotename: string,
- prefix: string,
pair: boolean,
side: string,
) => {
@@ -43,8 +42,8 @@ const setEmote = async (
)}.webp`;
} else {
url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(
- prefix,
- )}${encodeURI(emotename)}${extension}`;
+ emotename,
+ )}${extension}`;
}
const exists = await fileExists(url);
if (exists) {
diff --git a/webAO/viewport/utils/preloadMessageAssets.ts b/webAO/viewport/utils/preloadMessageAssets.ts
index f3924cd..aeae191 100644
--- a/webAO/viewport/utils/preloadMessageAssets.ts
+++ b/webAO/viewport/utils/preloadMessageAssets.ts
@@ -18,7 +18,6 @@ function buildEmoteUrls(
extensions: string[],
charactername: string,
emotename: string,
- prefix: string,
): string[] {
const characterFolder = `${AO_HOST}characters/`;
const urls: string[] = [];
@@ -30,7 +29,7 @@ function buildEmoteUrls(
} else if (extension === ".webp.static") {
url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(emotename)}.webp`;
} else {
- url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(prefix)}${encodeURI(emotename)}${extension}`;
+ url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(emotename)}${extension}`;
}
urls.push(url);
}
@@ -66,8 +65,8 @@ export default async function preloadMessageAssets(
const doPreload = async (): Promise<PreloadedAssets> => {
// Build candidate URL lists for each emote
- const idleUrls = buildEmoteUrls(AO_HOST, emoteExtensions, charName, charEmote, "(a)");
- const talkingUrls = buildEmoteUrls(AO_HOST, emoteExtensions, charName, charEmote, "(b)");
+ const idleUrls = buildEmoteUrls(AO_HOST, emoteExtensions, charName, charEmote);
+ const talkingUrls = buildEmoteUrls(AO_HOST, emoteExtensions, charName, charEmote);
const hasPreanim =
chatmsg.type === 1 &&
@@ -76,12 +75,12 @@ export default async function preloadMessageAssets(
chatmsg.preanim !== "";
const preanimUrls = hasPreanim
- ? buildEmoteUrls(AO_HOST, emoteExtensions, charName, chatmsg.preanim!, "")
+ ? buildEmoteUrls(AO_HOST, emoteExtensions, charName, chatmsg.preanim!)
: null;
const hasPair = !!chatmsg.other_name;
const pairIdleUrls = hasPair
- ? buildEmoteUrls(AO_HOST, emoteExtensions, chatmsg.other_name!, chatmsg.other_emote!, "(a)")
+ ? buildEmoteUrls(AO_HOST, emoteExtensions, chatmsg.other_name!, chatmsg.other_emote!)
: null;
// Shout SFX per-character path
diff --git a/webAO/viewport/viewport.ts b/webAO/viewport/viewport.ts
index 70ec5c5..1421c67 100644
--- a/webAO/viewport/viewport.ts
+++ b/webAO/viewport/viewport.ts
@@ -255,7 +255,7 @@ const viewport = (): Viewport => {
if (chatmsg.preloadedAssets) {
setEmoteFromUrl(chatmsg.preloadedAssets.idleUrl, false, chatmsg.side);
} else {
- setEmote(AO_HOST, client, charName, charEmote, "(a)", false, chatmsg.side);
+ setEmote(AO_HOST, client, charName, charEmote, false, chatmsg.side);
}
charLayers.style.opacity = "1";
waitingBox.style.opacity = "1";
@@ -354,7 +354,7 @@ const viewport = (): Viewport => {
setEmoteFromUrl(chatmsg.preloadedAssets.preanimUrl, false, chatmsg.side);
} else {
const preanim = chatmsg.preanim;
- setEmote(AO_HOST, client, charName, preanim, "", false, chatmsg.side);
+ setEmote(AO_HOST, client, charName, preanim, false, chatmsg.side);
}
}
@@ -444,7 +444,7 @@ const viewport = (): Viewport => {
if (chatmsg.preloadedAssets) {
setEmoteFromUrl(chatmsg.preloadedAssets.pairIdleUrl, true, chatmsg.side);
} else {
- setEmote(AO_HOST, client, pairName, pairEmote, "(a)", true, chatmsg.side);
+ setEmote(AO_HOST, client, pairName, pairEmote, true, chatmsg.side);
}
pairLayers.style.opacity = "1";
} else {
@@ -454,7 +454,7 @@ const viewport = (): Viewport => {
if (chatmsg.preloadedAssets) {
setEmoteFromUrl(chatmsg.preloadedAssets.talkingUrl, false, chatmsg.side);
} else {
- setEmote(AO_HOST, client, charName, charEmote, "(b)", false, chatmsg.side);
+ setEmote(AO_HOST, client, charName, charEmote, false, chatmsg.side);
}
charLayers.style.opacity = "1";
@@ -462,7 +462,7 @@ const viewport = (): Viewport => {
if (chatmsg.preloadedAssets) {
setEmoteFromUrl(chatmsg.preloadedAssets.idleUrl, false, chatmsg.side);
} else {
- setEmote(AO_HOST, client, charName, charEmote, "(a)", false, chatmsg.side);
+ setEmote(AO_HOST, client, charName, charEmote, false, chatmsg.side);
}
charLayers.style.opacity = "1";
waitingBox.style.opacity = "1";