Redesign avatars as a gods/legends pantheon (custom SVG medallions)
CI/CD / CI - API (dotnet build + engine sim) (push) Successful in 3m7s
CI/CD / CI - Web (tsc + next build) (push) Successful in 1m9s
CI/CD / Deploy - local stack (db + server + web) (push) Failing after 2m24s

Replaced the childish animal emoji avatars with custom inline-SVG "deity
medallions" (gradient disc + gold ring + heraldic emblem) — Athena, Zeus,
Poseidon, Horus, Odin, Thor, Cyrus, Simorgh, Ishtar, Nike, etc. IDs unchanged
so owned avatars keep working; Avatar renders the art (emoji fallback for legacy
ids). Shop now shows the art + the god name (was generic "Avatar").

Files: components/online/avatarArt.tsx (new art + pantheon map), Avatar.tsx
(render art), ShopScreen Preview (avatar → <Avatar/>), mock-service avatar shop
names from AVATAR_ART.

Verified: tsc + next build clean; web rebuilt on :1500.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-07 18:16:17 +03:30
parent fd7bef36d8
commit ccfc9b0536
4 changed files with 247 additions and 13 deletions
+16 -12
View File
@@ -24,6 +24,7 @@ import {
OnlineService,
Unsubscribe,
} from "./service";
import { AVATAR_ART } from "@/components/online/avatarArt";
import {
AVATARS,
AppNotification,
@@ -1022,18 +1023,21 @@ export class MockOnlineService implements OnlineService {
}
async getShopItems(): Promise<ShopItem[]> {
const avatarItems: ShopItem[] = AVATARS.filter((a) => (a.price ?? 0) > 0).map((a) => ({
id: a.id,
kind: "avatar",
nameFa: "آواتار",
nameEn: "Avatar",
price: a.price!,
preview: a.emoji,
descFa: "آواتار نمایه شما در بازی و جدول",
descEn: "Your profile avatar in games & leaderboard",
reqLevel: a.reqLevel,
reqRating: a.reqRating,
}));
const avatarItems: ShopItem[] = AVATARS.filter((a) => (a.price ?? 0) > 0).map((a) => {
const art = AVATAR_ART[a.id];
return {
id: a.id,
kind: "avatar" as const,
nameFa: art?.nameFa ?? "آواتار",
nameEn: art?.nameEn ?? "Avatar",
price: a.price!,
preview: a.emoji,
descFa: "آواتار افسانه‌ای نمایه شما در بازی و جدول",
descEn: "A legendary profile avatar shown in games & the leaderboard",
reqLevel: a.reqLevel,
reqRating: a.reqRating,
};
});
const backItems: ShopItem[] = CARD_BACKS.filter((c) => c.price > 0).map((c) => ({
id: c.id,
kind: "cardback",