Notations and some important data structures used in Habbo Hotel
Nota
Este documento é uma tradução do original. Caso observe inconsistências em relação ao conteúdo do jogo neste idioma, por favor, nos avise para que possamos corrigir a localização.
Habbo Avatar Figure Notation (HAFN) v2 é um padrão para notação de strings em formato de texto projetado para representar aparências de avatares do Habbo usando códigos compactos separados por pontos. Cada string codifica dados estruturados que representam partes da figura, IDs de conjunto e IDs de cor opcionais, e baseia-se nos dados expostos pelo figuredata
atualmente disponível.
Embora o HAFN v2 reflita como as figuras de avatar são codificadas nas URLs do Habbo e nos sistemas de backend, ele não é uma notação oficial da Sulake, e mudanças futuras podem não ser adotadas pela Sulake.
Esta especificação existe para formalizar e documentar como o Habbo codifica strings de figura de avatar para fins de renderização e personalização. Ela é:
figuredata
disponíveis publicamente.O HAFN v2 é uma representação textual da configuração do avatar que permite:
Ele NÃO inclui elementos adicionais como ações de avatar e efeitos visuais, conforme descrito na Seção 8.
Este documento é voltado para desenvolvedores, arquivistas, modders e entusiastas da comunidade Habbo que trabalham com ferramentas e experiências relacionadas a avatares. Familiaridade com manipulação de strings e análise de XML (para leitura do figuredata
) é recomendada.
O HAFN v2.0 define a estrutura atualmente conhecida das strings de avatar do Habbo, com base no comportamento de parsing observado no Habbo Hotel e personalizável através do arquivo figuredata
.
O HAFN é mantido pela comunidade. Embora corresponda aos padrões de uso atuais, a Sulake pode alterar o formato a qualquer momento. Extensões futuras buscarão preservar compatibilidade retroativa sempre que possível.
As palavras-chave “DEVE”, “NÃO DEVE”, “OBRIGATÓRIO”, “DEVERÁ”, “DEVERÁ NÃO”, “RECOMENDADO”, “PODE” e “OPCIONAL” neste documento devem ser interpretadas conforme descrito em RFC 2119.
Uma implementação é considerada compatível com o HAFN v2.0 se aderir à sintaxe, lógica de validação e regras de resolução definidas neste documento. Um implementador de parser em conformidade:
figuredata
válida.figuredata
atual.Uma string HAFN v2.0 válida DEVE:
figuredata
.Uma string HAFN v2 codifica a aparência completa de um avatar do Habbo. Consiste em múltiplas partes da figura, separadas por pontos (.
). Cada parte codifica um tipo, ID de conjunto e até dois IDs de cor.
A Forma de Backus-Naur Estendida (EBNF) a seguir define a sintaxe do HAFN v2.0:
<figure> ::= <part> ("." <part>)*
<part> ::= <type> "-" <setId> [ "-" <colorId1> [ "-" <colorId2> ] ]
<type> ::= "hr" | "hd" | "ch" | "lg" | "sh" | "ea" | "cc" | ... ; (ver figuredata)
<setId> ::= <positiveInteger>
<colorId1> ::= <positiveInteger>
<colorId2> ::= <positiveInteger>
Campo | Tipo | Descrição |
---|---|---|
type |
String | Um tipo de parte válido, conforme definido em figuredata |
setId |
Inteiro | Um ID de conjunto válido pertencente ao tipo de parte especificado |
colorId1 |
Inteiro | Um ID de cor primária (PODE ser obrigatório dependendo da parte) |
colorId2 |
Inteiro | Um ID de cor secundária, OPCIONAL (para partes com duas camadas) |
Cada parte DEVE corresponder a uma entrada set
existente no arquivo figuredata
sob o <settype type="...">
correspondente.
A expressão regular a seguir pode ser usada para validar a estrutura geral de uma string HAFN v2.0:
(?:[a-z]{2}-\d+(?:-\d+(?:-\d+)?)?)(?:\.(?:[a-z]{2}-\d+(?:-\d+(?:-\d+)?)?))*
Cada parte é separada por um ponto (.
). O parser DEVE:
.
para extrair partes individuais-
para determinar seu tipo, ID de conjunto e cores opcionaisfiguredata
atualfiguredata
sob <settype type="...">
paletteid
) referenciada pela definição do conjuntoCódigo de Erro | Descrição |
---|---|
ERR_UNKNOWN_TYPE | type não encontrado no figuredata atual |
ERR_INVALID_SETID | ID de conjunto não definido para o tipo especificado |
ERR_INVALID_COLOR | ID de cor não válido para a paleta usada no conjunto |
ERR_FORMAT_SYNTAX | Delimitador - ausente, uso incorreto de delimitadores |
ERR_PART_INCOMPLETE | Falta ID de conjunto ou ID de cor obrigatório |
Um parser compatível com HAFN DEVE rejeitar strings inválidas e relatar o erro apropriado.
Considere a seguinte string HAFN v2.0:
hr-890-45.hd-600-10.ch-665-1408.lg-716-1408-1408
Explicação:
hr-890-45
→ Cabelo, ID de conjunto 890, cor 45hd-600-10
→ Cabeça, ID de conjunto 600, cor 10ch-665-1408
→ Camisa (peito), conjunto 665, cor 1408lg-716-1408-1408
→ Calças (pernas), conjunto 716, cores duplas 1408O avatar pode ter muito mais partes definidas:
hr-802-37.hd-180-1.ch-3030-1408.lg-3023-64.sh-3068-1408-64.ea-1403-1408.cc-3280-64-1408.cp-3284-64
Explicação:
hr-802-37
→ Cabelo, conjunto 802, cor 37hd-180-1
→ Cabeça, conjunto 180, cor 1ch-3030-1408
→ Camisa, conjunto 3030, cor 1408lg-3023-64
→ Calças, conjunto 3023, cor 64sh-3068-1408-64
→ Sapatos, conjunto 3068, cor primária 1408, secundária 64ea-1403-1408
→ Óculos, conjunto 1403, cor 1408cc-3280-64-1408
→ Casaco, conjunto 3280, cor primária 64, secundária 1408cp-3284-64
→ Estampa, conjunto 3284, cor 64
Existem outros aspectos relacionados à figura do avatar que não são cobertos por esta especificação, como itens de vestuário que usam múltiplas partes, ações do avatar (por exemplo, deitar, sentar, acenar, dançar) e efeitos visuais. Esses elementos não estão presentes na notação em si e devem ser considerados puramente informativos neste documento; eles não definem ou alteram a notação.
Abaixo estão links para fontes de dados relevantes usadas para computar ou renderizar esses elementos. Documentação adicional pode ser escrita para explicá-los em mais detalhes:
Versões futuras PODEM incluir:
Revisões da especificação DEVERÃO ser versionadas adequadamente, e a compatibilidade retroativa PODE ser mantida quando possível.
Embora o HAFN v2 seja uma notação textual e não execute código, as implementações DEVEM sanitizar e validar rigorosamente as strings de entrada para prevenir problemas como:
Importante
Strings HAFN v2 não verificam propriedade de roupas ou cores. Elas representam apenas aparência e não devem ser usadas para impor acesso ou propriedade de partes da figura.
A adesão estrita à sintaxe e às diretrizes de processamento é necessária para uma implementação segura.
figuredata
do Habbo, Habbo.com.br. Disponível em: https://www.habbo.com.br/gamedata/figuredata/1external_flash_texts
do Habbo, Habbo.com.br. Disponível em: https://www.habbo.com.br/gamedata/external_flash_texts/1Este documento foi desenvolvido com contribuições de:
v1
para o v2
para deixar o v1
como notação baseada em numéricos.A tabela a seguir lista os identificadores de duas letras atualmente suportados usados para partes da figura do avatar, juntamente com seus nomes, ícones e exemplos.
Nome da Categoria | Ícone da Categoria | Identificador da Subcategoria ▲ | Nome da Subcategoria | Ícone da Subcategoria | Exemplos |
---|---|---|---|---|---|
Parte de cima | ![]() |
ca |
Bijuterias (acessórios superiores) | ![]() ![]() |
|
Parte de cima | ![]() |
cc |
Casacos | ![]() ![]() |
|
Parte de cima | ![]() |
ch |
Camisas | ![]() ![]() |
|
Parte de cima | ![]() |
cp |
Estampas | ![]() ![]() |
|
Cabeça | ![]() |
ea |
Óculos (acessórios de rosto) | ![]() ![]() |
|
Cabeça | ![]() |
fa |
Máscaras (acessórios faciais) | ![]() ![]() |
|
Cabeça | ![]() |
ha |
Chapéus | ![]() ![]() |
|
Corpo | ![]() |
hd |
Rosto e Corpo | ![]() ![]() ![]() ![]() |
|
Cabeça | ![]() |
he |
Acessórios | ![]() ![]() |
|
Cabeça | ![]() |
hr |
Cabelos | ![]() ![]() |
|
Parte de baixo | ![]() |
lg |
Calças | ![]() ![]() |
|
Parte de baixo | ![]() |
sh |
Sapatos | ![]() ![]() |
|
Parte de baixo | ![]() |
wa |
Cintos (acessórios inferiores) | ![]() ![]() |