From 282fd6f6bdb7ddcbfc35f7e55e5f68f211257479 Mon Sep 17 00:00:00 2001 From: duckietm Date: Thu, 16 Apr 2026 13:36:17 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=86=99=20New=20misc=20clothing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../avatar/enum/AvatarEditorFigureCategory.ts | 1 + .../nitro/avatar/enum/AvatarFigurePartType.ts | 3 +- .../avatar/src/data/HabboAvatarAnimations.ts | 201 ++++++++++++++++++ .../avatar/src/data/HabboAvatarGeometry.ts | 132 ++++++++++++ .../avatar/src/data/HabboAvatarPartSets.ts | 20 ++ 5 files changed, 356 insertions(+), 1 deletion(-) diff --git a/packages/api/src/nitro/avatar/enum/AvatarEditorFigureCategory.ts b/packages/api/src/nitro/avatar/enum/AvatarEditorFigureCategory.ts index c66a37d..f52d082 100644 --- a/packages/api/src/nitro/avatar/enum/AvatarEditorFigureCategory.ts +++ b/packages/api/src/nitro/avatar/enum/AvatarEditorFigureCategory.ts @@ -8,5 +8,6 @@ public static WARDROBE: string = 'wardrobe'; public static EFFECTS: string = 'effects'; public static PETS: string = 'pets'; + public static MISC: string = 'misc'; public static NFT: string = 'nft'; } diff --git a/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts b/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts index 214f285..d6eb04c 100644 --- a/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts +++ b/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts @@ -32,5 +32,6 @@ public static LEFT_COAT_SLEEVE: string = 'lc'; public static RIGHT_COAT_SLEEVE: string = 'rc'; public static PET: string = 'pt'; - public static FIGURE_SETS: string[] = [ AvatarFigurePartType.SHOES, AvatarFigurePartType.LEGS, AvatarFigurePartType.CHEST, AvatarFigurePartType.WAIST_ACCESSORY, AvatarFigurePartType.CHEST_ACCESSORY, AvatarFigurePartType.HEAD, AvatarFigurePartType.HAIR, AvatarFigurePartType.FACE_ACCESSORY, AvatarFigurePartType.EYE_ACCESSORY, AvatarFigurePartType.HEAD_ACCESSORY, AvatarFigurePartType.HEAD_ACCESSORY_EXTRA, AvatarFigurePartType.COAT_CHEST, AvatarFigurePartType.CHEST_PRINT, AvatarFigurePartType.PET ]; + public static MISC: string = 'mc'; + public static FIGURE_SETS: string[] = [ AvatarFigurePartType.SHOES, AvatarFigurePartType.LEGS, AvatarFigurePartType.CHEST, AvatarFigurePartType.WAIST_ACCESSORY, AvatarFigurePartType.CHEST_ACCESSORY, AvatarFigurePartType.HEAD, AvatarFigurePartType.HAIR, AvatarFigurePartType.FACE_ACCESSORY, AvatarFigurePartType.EYE_ACCESSORY, AvatarFigurePartType.HEAD_ACCESSORY, AvatarFigurePartType.HEAD_ACCESSORY_EXTRA, AvatarFigurePartType.COAT_CHEST, AvatarFigurePartType.CHEST_PRINT, AvatarFigurePartType.PET, AvatarFigurePartType.MISC ]; } diff --git a/packages/avatar/src/data/HabboAvatarAnimations.ts b/packages/avatar/src/data/HabboAvatarAnimations.ts index 867ff9e..84d8c53 100644 --- a/packages/avatar/src/data/HabboAvatarAnimations.ts +++ b/packages/avatar/src/data/HabboAvatarAnimations.ts @@ -249,6 +249,45 @@ export const HabboAvatarAnimations = { { 'number': 6, 'assetPartDefinition': 'std' }, { 'number': 7, 'assetPartDefinition': 'std' } ] + }, + { + 'setType': 'mc', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'std' }, + { 'number': 1, 'assetPartDefinition': 'std' }, + { 'number': 2, 'assetPartDefinition': 'std' }, + { 'number': 3, 'assetPartDefinition': 'std' }, + { 'number': 4, 'assetPartDefinition': 'std' }, + { 'number': 5, 'assetPartDefinition': 'std' }, + { 'number': 6, 'assetPartDefinition': 'std' }, + { 'number': 7, 'assetPartDefinition': 'std' } + ] + }, + { + 'setType': 'mcl', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'std' }, + { 'number': 1, 'assetPartDefinition': 'std' }, + { 'number': 2, 'assetPartDefinition': 'std' }, + { 'number': 3, 'assetPartDefinition': 'std' }, + { 'number': 4, 'assetPartDefinition': 'std' }, + { 'number': 5, 'assetPartDefinition': 'std' }, + { 'number': 6, 'assetPartDefinition': 'std' }, + { 'number': 7, 'assetPartDefinition': 'std' } + ] + }, + { + 'setType': 'mcr', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'std' }, + { 'number': 1, 'assetPartDefinition': 'std' }, + { 'number': 2, 'assetPartDefinition': 'std' }, + { 'number': 3, 'assetPartDefinition': 'std' }, + { 'number': 4, 'assetPartDefinition': 'std' }, + { 'number': 5, 'assetPartDefinition': 'std' }, + { 'number': 6, 'assetPartDefinition': 'std' }, + { 'number': 7, 'assetPartDefinition': 'std' } + ] } ] }, @@ -410,6 +449,45 @@ export const HabboAvatarAnimations = { { 'number': 6, 'assetPartDefinition': 'sit' }, { 'number': 7, 'assetPartDefinition': 'sit' } ] + }, + { + 'setType': 'mc', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'sit' }, + { 'number': 1, 'assetPartDefinition': 'sit' }, + { 'number': 2, 'assetPartDefinition': 'sit' }, + { 'number': 3, 'assetPartDefinition': 'sit' }, + { 'number': 4, 'assetPartDefinition': 'sit' }, + { 'number': 5, 'assetPartDefinition': 'sit' }, + { 'number': 6, 'assetPartDefinition': 'sit' }, + { 'number': 7, 'assetPartDefinition': 'sit' } + ] + }, + { + 'setType': 'mcl', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'sit' }, + { 'number': 1, 'assetPartDefinition': 'sit' }, + { 'number': 2, 'assetPartDefinition': 'sit' }, + { 'number': 3, 'assetPartDefinition': 'sit' }, + { 'number': 4, 'assetPartDefinition': 'sit' }, + { 'number': 5, 'assetPartDefinition': 'sit' }, + { 'number': 6, 'assetPartDefinition': 'sit' }, + { 'number': 7, 'assetPartDefinition': 'sit' } + ] + }, + { + 'setType': 'mcr', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'sit' }, + { 'number': 1, 'assetPartDefinition': 'sit' }, + { 'number': 2, 'assetPartDefinition': 'sit' }, + { 'number': 3, 'assetPartDefinition': 'sit' }, + { 'number': 4, 'assetPartDefinition': 'sit' }, + { 'number': 5, 'assetPartDefinition': 'sit' }, + { 'number': 6, 'assetPartDefinition': 'sit' }, + { 'number': 7, 'assetPartDefinition': 'sit' } + ] } ] }, @@ -584,6 +662,45 @@ export const HabboAvatarAnimations = { { 'number': 6, 'assetPartDefinition': 'lay' }, { 'number': 7, 'assetPartDefinition': 'lay' } ] + }, + { + 'setType': 'mc', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'lay' }, + { 'number': 1, 'assetPartDefinition': 'lay' }, + { 'number': 2, 'assetPartDefinition': 'lay' }, + { 'number': 3, 'assetPartDefinition': 'lay' }, + { 'number': 4, 'assetPartDefinition': 'lay' }, + { 'number': 5, 'assetPartDefinition': 'lay' }, + { 'number': 6, 'assetPartDefinition': 'lay' }, + { 'number': 7, 'assetPartDefinition': 'lay' } + ] + }, + { + 'setType': 'mcl', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'lay' }, + { 'number': 1, 'assetPartDefinition': 'lay' }, + { 'number': 2, 'assetPartDefinition': 'lay' }, + { 'number': 3, 'assetPartDefinition': 'lay' }, + { 'number': 4, 'assetPartDefinition': 'lay' }, + { 'number': 5, 'assetPartDefinition': 'lay' }, + { 'number': 6, 'assetPartDefinition': 'lay' }, + { 'number': 7, 'assetPartDefinition': 'lay' } + ] + }, + { + 'setType': 'mcr', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'lay' }, + { 'number': 1, 'assetPartDefinition': 'lay' }, + { 'number': 2, 'assetPartDefinition': 'lay' }, + { 'number': 3, 'assetPartDefinition': 'lay' }, + { 'number': 4, 'assetPartDefinition': 'lay' }, + { 'number': 5, 'assetPartDefinition': 'lay' }, + { 'number': 6, 'assetPartDefinition': 'lay' }, + { 'number': 7, 'assetPartDefinition': 'lay' } + ] } ] }, @@ -910,6 +1027,33 @@ export const HabboAvatarAnimations = { { 'number': 2, 'assetPartDefinition': 'wlk' }, { 'number': 3, 'assetPartDefinition': 'wlk' } ] + }, + { + 'setType': 'mc', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'wlk' }, + { 'number': 1, 'assetPartDefinition': 'wlk' }, + { 'number': 2, 'assetPartDefinition': 'wlk' }, + { 'number': 3, 'assetPartDefinition': 'wlk' } + ] + }, + { + 'setType': 'mcl', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'wlk' }, + { 'number': 1, 'assetPartDefinition': 'wlk' }, + { 'number': 2, 'assetPartDefinition': 'wlk' }, + { 'number': 3, 'assetPartDefinition': 'wlk' } + ] + }, + { + 'setType': 'mcr', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'wlk' }, + { 'number': 1, 'assetPartDefinition': 'wlk' }, + { 'number': 2, 'assetPartDefinition': 'wlk' }, + { 'number': 3, 'assetPartDefinition': 'wlk' } + ] } ] }, @@ -1009,6 +1153,27 @@ export const HabboAvatarAnimations = { { 'number': 0, 'assetPartDefinition': 'wav' }, { 'number': 1, 'assetPartDefinition': 'wav' } ] + }, + { + 'setType': 'mc', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'wav' }, + { 'number': 1, 'assetPartDefinition': 'wav' } + ] + }, + { + 'setType': 'mcl', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'wav' }, + { 'number': 1, 'assetPartDefinition': 'wav' } + ] + }, + { + 'setType': 'mcr', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'wav' }, + { 'number': 1, 'assetPartDefinition': 'wav' } + ] } ] }, @@ -1239,6 +1404,24 @@ export const HabboAvatarAnimations = { 'frames': [ { 'number': 0, 'assetPartDefinition': 'std' } ] + }, + { + 'setType': 'mc', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'std' } + ] + }, + { + 'setType': 'mcl', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'std' } + ] + }, + { + 'setType': 'mcr', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'std' } + ] } ] }, @@ -1317,6 +1500,24 @@ export const HabboAvatarAnimations = { 'frames': [ { 'number': 0, 'assetPartDefinition': 'drk' } ] + }, + { + 'setType': 'mc', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'drk' } + ] + }, + { + 'setType': 'mcl', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'drk' } + ] + }, + { + 'setType': 'mcr', + 'frames': [ + { 'number': 0, 'assetPartDefinition': 'drk' } + ] } ], 'offsets': { diff --git a/packages/avatar/src/data/HabboAvatarGeometry.ts b/packages/avatar/src/data/HabboAvatarGeometry.ts index 64d48d4..c3028b6 100644 --- a/packages/avatar/src/data/HabboAvatarGeometry.ts +++ b/packages/avatar/src/data/HabboAvatarGeometry.ts @@ -278,6 +278,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mc', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.09, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -382,6 +393,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcl', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -446,6 +468,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcr', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -710,6 +743,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mc', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.09, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -814,6 +858,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcl', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -878,6 +933,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcr', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -1121,6 +1187,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mc', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.09, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -1225,6 +1302,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcl', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -1289,6 +1377,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcr', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -1532,6 +1631,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mc', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.09, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -1636,6 +1746,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcl', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, @@ -1700,6 +1821,17 @@ export const HabboAvatarGeometry = { 'ny': 0, 'nz': -1, 'double': false + }, + { + 'id': 'mcr', + 'x': 0, + 'y': 0, + 'z': 0, + 'radius': 0.04, + 'nx': 0, + 'ny': 0, + 'nz': -1, + 'double': false } ] }, diff --git a/packages/avatar/src/data/HabboAvatarPartSets.ts b/packages/avatar/src/data/HabboAvatarPartSets.ts index 4e91647..cd89a8c 100644 --- a/packages/avatar/src/data/HabboAvatarPartSets.ts +++ b/packages/avatar/src/data/HabboAvatarPartSets.ts @@ -114,6 +114,17 @@ export const HabboAvatarPartSets = { { 'setType': 'ptr', 'flippedSetType': 'ptl' + }, + { + 'setType': 'mc' + }, + { + 'setType': 'mcl', + 'flippedSetType': 'mcr' + }, + { + 'setType': 'mcr', + 'flippedSetType': 'mcl' } ], 'activePartSets': [ @@ -212,6 +223,15 @@ export const HabboAvatarPartSets = { }, { 'setType': 'ptr' + }, + { + 'setType': 'mc' + }, + { + 'setType': 'mcl' + }, + { + 'setType': 'mcr' } ] },