mirror of
https://github.com/Such-Software/wownerogue.git
synced 2026-10-18 06:41:27 +02:00
feat: improve character customization colors
This commit is contained in:
+17
-3
@@ -1,15 +1,29 @@
|
||||
const Appearance = require('../src/multiplayer/appearance');
|
||||
|
||||
describe('appearance catalog normalization', () => {
|
||||
test('normalizes character tint and equipment slots', () => {
|
||||
test('normalizes character colors and equipment slots', () => {
|
||||
expect(Appearance.normalizeAppearance({
|
||||
avatar: 'char-ranger',
|
||||
tint: 'moss',
|
||||
equipment: { body: 'mail', head: 'helm', shield: 'bad', weapon: 'bow' }
|
||||
equipment: { body: 'mail', head: 'helm', shield: 'bad', weapon: 'bow' },
|
||||
colors: { base: 'teal', skin: 'warm', hair: 'silver', body: 'gold', head: 'bad', shield: 'rose', weapon: 'ash' }
|
||||
})).toEqual({
|
||||
avatar: 'char-ranger',
|
||||
tint: 'teal',
|
||||
equipment: { body: 'mail', head: 'helm', shield: 'none', weapon: 'bow' },
|
||||
colors: { base: 'teal', skin: 'warm', hair: 'silver', body: 'gold', head: 'none', shield: 'rose', weapon: 'ash' }
|
||||
});
|
||||
});
|
||||
|
||||
test('uses legacy tint as the default character color ramp', () => {
|
||||
expect(Appearance.normalizeAppearance({
|
||||
avatar: 'char-ranger',
|
||||
tint: 'moss'
|
||||
})).toEqual({
|
||||
avatar: 'char-ranger',
|
||||
tint: 'moss',
|
||||
equipment: { body: 'mail', head: 'helm', shield: 'none', weapon: 'bow' }
|
||||
equipment: { body: 'none', head: 'none', shield: 'none', weapon: 'none' },
|
||||
colors: { base: 'moss', skin: 'natural', hair: 'copper', body: 'moss', head: 'moss', shield: 'moss', weapon: 'moss' }
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -15,7 +15,8 @@ function makeDb({ user, grants = [] } = {}) {
|
||||
appearance: {
|
||||
avatar: 'char-ranger',
|
||||
tint: 'teal',
|
||||
equipment: { body: 'mail', head: 'hood', shield: 'round', weapon: 'bow' }
|
||||
equipment: { body: 'mail', head: 'hood', shield: 'round', weapon: 'bow' },
|
||||
colors: { base: 'teal', skin: 'warm', hair: 'silver', body: 'gold', head: 'none', shield: 'rose', weapon: 'none' }
|
||||
},
|
||||
...user
|
||||
},
|
||||
@@ -58,13 +59,15 @@ describe('IdentityService', () => {
|
||||
const snapshot = await svc.saveAppearanceForSocket(makeSocket(), {
|
||||
avatar: 'char-ranger',
|
||||
tint: 'bad',
|
||||
equipment: { body: 'mail', head: 'bad', shield: 'round', weapon: 'laser' }
|
||||
equipment: { body: 'mail', head: 'bad', shield: 'round', weapon: 'laser' },
|
||||
colors: { base: 'violet', skin: 'bad', hair: 'black', body: 'gold', head: 'bad', shield: 'rose', weapon: 'bad' }
|
||||
});
|
||||
|
||||
expect(snapshot.appearance).toEqual({
|
||||
avatar: 'char-ranger',
|
||||
tint: 'none',
|
||||
equipment: { body: 'mail', head: 'none', shield: 'round', weapon: 'none' }
|
||||
tint: 'violet',
|
||||
equipment: { body: 'mail', head: 'none', shield: 'round', weapon: 'none' },
|
||||
colors: { base: 'violet', skin: 'natural', hair: 'black', body: 'gold', head: 'none', shield: 'rose', weapon: 'none' }
|
||||
});
|
||||
expect(db.state.user.appearance).toEqual(snapshot.appearance);
|
||||
expect(sessionManager.sessions.get('sockA').appearance).toEqual(snapshot.appearance);
|
||||
|
||||
@@ -79,7 +79,8 @@ describe('TavernManager', () => {
|
||||
const appearance = {
|
||||
avatar: 'char-ranger',
|
||||
tint: 'teal',
|
||||
equipment: { body: 'mail', head: 'hood', shield: 'round', weapon: 'bow' }
|
||||
equipment: { body: 'mail', head: 'hood', shield: 'round', weapon: 'bow' },
|
||||
colors: { base: 'teal', skin: 'warm', hair: 'silver', body: 'gold', head: 'none', shield: 'rose', weapon: 'none' }
|
||||
};
|
||||
|
||||
await mgr.join(s, { name: 'Alice', avatar: 'green', appearance });
|
||||
@@ -101,15 +102,17 @@ describe('TavernManager', () => {
|
||||
appearance: {
|
||||
avatar: 'char-ranger',
|
||||
tint: 'bad',
|
||||
equipment: { body: 'mail', head: 'bad', shield: 'round', weapon: 'laser' }
|
||||
equipment: { body: 'mail', head: 'bad', shield: 'round', weapon: 'laser' },
|
||||
colors: { base: 'violet', skin: 'bad', hair: 'black', body: 'gold', head: 'bad', shield: 'rose', weapon: 'bad' }
|
||||
}
|
||||
});
|
||||
const occ = mgr.room.getOccupant('a');
|
||||
expect(occ.avatar).toBe('char-ranger');
|
||||
expect(occ.appearance).toEqual({
|
||||
avatar: 'char-ranger',
|
||||
tint: 'none',
|
||||
equipment: { body: 'mail', head: 'none', shield: 'round', weapon: 'none' }
|
||||
tint: 'violet',
|
||||
equipment: { body: 'mail', head: 'none', shield: 'round', weapon: 'none' },
|
||||
colors: { base: 'violet', skin: 'natural', hair: 'black', body: 'gold', head: 'none', shield: 'rose', weapon: 'none' }
|
||||
});
|
||||
expect(occ.name).not.toMatch(/[<>]/);
|
||||
expect(occ.name.length).toBeLessThanOrEqual(16);
|
||||
|
||||
Reference in New Issue
Block a user