↓ Ir para o conteúdo principal

Animações

Versão documentada: v0.1.8

Tradução da página original em inglês, que é a referência se algo estiver diferente.

O Zeca e os vults são urubus-de-cabeça-preta (Coragyps atratus). Cada clipe nasce de algo que um urubu-de-cabeça-preta de verdade faz, para que a ave seja lida como urubu antes de ser lida como luz de status.

Como é um urubu-de-cabeça-preta
#

  • Plumagem preta fosca com um leve brilho azulado; cauda curta e quadrada.
  • Cabeça nua, enrugada e cinza-escura num pescoço curto; olho castanho-escuro sob uma sobrancelha; bico fino e escuro, com a ponta de chifre clara curvada para baixo bem no fim.
  • Pernas cinza-claras.
  • Em voo, asas largas e curtas cujas primárias são branco-prateadas por baixo, abertas como dedos.

Como ele se move
#

ComportamentoComo parece
Voo batidoTrês ou quatro batidas rápidas, curtas e rígidas, depois um planeio curto de asas retas (sem “V”, ao contrário do urubu-de-cabeça-vermelha)
Voo planadoCírculos largos numa térmica, planando, subindo aos poucos
DecolagemUm agachamento e um pulo, depois batidas fundas e pesadas para baixo
PousoAsas para cima e para a frente para frear, pés para fora, asas fechadas só depois de tocar o chão
PousadoOmbros curvados, cabeça para a frente; vira a cabeça para observar e inclina para examinar
Banho de solAsas bem abertas, de frente para o sol: os pulsos no alto, a mão pendendo com as primárias abertas, o corpo redondo entre elas
AmeaçaPenas eriçadas, um chiado de bico aberto
SonoTodo afofado, a cabeça virada para trás e deitada nas costas, sob as penas

Clipes
#

ClipeAtividade ou estadoComportamento que ele empresta
idleociosoObservando, piscando, uma respiração de vez em quando, um ajeitar dos pés, uma olhada para trás por cima do ombro
thinkpensandoCabeça erguida e parada, piscadas lentas
readlendoCabeça baixa, varrendo uma linha e descendo para a próxima
searchbuscandoPescoço esticado, viradas rápidas de cabeça, uma inclinada para olhar mais de perto
editeditandoO movimento de comer: inclina, bica, puxa para trás
runexecutandoPuxões rápidos no fio, pés se ajeitando para firmar
approvalaprovaçãoPose de banho de sol: olha para você quase o tempo todo, vira a cabeça para um lado e para o outro entre um olhar e outro, e as asas abertas baixam e sobem de novo
questionperguntaA inclinada curiosa de cabeça, mantida
doneconcluídoUm pulo que pousa com um leve achatamento, um alongamento de asa e perna, se acomoda, depois a assinatura da espécie (veja abaixo)
failfalhaPenas eriçadas, um chiado, uma sacudida; depois abatido, cabeça pendurada e uma asa caída
listeno mic do chat está abertoA cabeça inclinada na sua direção, pequenos acenos enquanto você fala
dancemúsica tocando (Now playing ligado), o Zeca sozinhoUm balanço a cada batida, gingando, um pé batendo
sleepdormindoTodo afofado, a cabeça virada para trás sobre as costas, só o alto dela aparecendo por cima dos ombros
swallowum arquivo solto em cima deleDesce até o fio, pega, joga a cabeça para trás e engole
gapeum arquivo arrastado sobre a ilhaCabeça para cima, bico aberto, esperando ele cair dentro
preeno ponteiro parado sobre o ZecaUma sessão de limpeza das penas, cabeça na asa
startleum clique no ZecaUm pulo com as asas jogadas para cima, cabeça erguida
helloo app abrindoUm pouso com achatamento, um quique para cima bem esticado e um pouso mais suave; depois ele vira a cabeça para você e acena com uma asa
speakSem uso: o Zeca responde só em texto, e nada no app o toca. Ele fica no sprite e no lab, onde os testes visuais o desenhamDe frente para o chat, o bico abrindo e fechando num ritmo irregular, uma piscada entre as frases
flywebUma saída completa: decola, bate-bate-bate-plana para longe, plana de volta, freia, pousa, vira; cada batida para baixo levanta o corpo uma linha

O clipe idle inclui uma sessão de limpeza das penas (cabeça na asa, mordiscadas rápidas), e o done estica uma asa para baixo e para trás, com a perna do mesmo lado, antes da assinatura da espécie: o alongamento que as aves fazem quando terminam algo.

Mais quatro clipes são montados para cada espécie com os quadros dela: doze (a cabeça pesa duas vezes, um tranco que o acorda, então ela vira para as costas e a ave dorme), wake (um olho abre com a cabeça nas costas, a cabeça volta, o alongamento de asa e perna (o urubu-rei, cujo done estica as duas asas, pula essa parte) e uma sacudida nas penas), court (asas meio abertas, cabeça baixa, um pulinho a cada dois tempos e uma olhada para cada lado; os dois condores abrem as asas inteiras, mantêm a cabeça alta e fazem uma reverência) e fed (depois de engolir, o papo estufa sob a faixa e esvazia em três tamanhos, na plumagem da própria ave, só no poleiro).

A ilha os toca assim:

  • doze: uma ave descansando num poleiro onde ela não plana cochila com ele depois de 90 segundos, ±12% conforme a sessão, e então dorme: o Zeca no fio vazio da ilha e no chat, o bando do Nest e o widget do canto (o bando ocioso da própria ilha plana em vez disso). Com movimento reduzido ela dorme direto.
  • wake: o trabalho acorda uma ave dormindo, que se alonga antes do clipe de trabalho (ou antes de decolar, no trabalho na web). Uma permissão, uma pergunta ou uma falha entra direto, sem alongamento.
  • court: com uma música tocando (Now playing), as aves ociosas do bando fazem o cortejo no fio em vez de planar, e voltam a subir quando ela para. O Zeca sozinho continua dançando.
  • fed: quando o Zeca engole um arquivo no chat, o engolir segue para o papo cheio, que esvazia enquanto ele descansa; pensar, ouvir ou outro arquivo interrompe.

O Zeca percebe você
#

No card de foco e no chat, um Zeca em repouso olha para o ponteiro: por cima do ombro quando ele está atrás, para você (com uma piscada) quando está em cima dele. Deixe o ponteiro parado nele e ele limpa as penas; clique nele e ele se assusta; três cliques seguidos e ele se estufa e chia. Quando o app abre, ele cai direto no fio, pousa com um achatamento (afofado, afundado sobre as pernas dobradas) e um quique, e acena um olá; a ilha recolhe quando ele termina. O achatamento é desenhado com as próprias partes dele, então toda espécie e todo visual sazonal pousa do mesmo jeito. Com movimento reduzido não há olá.

Marcas sobre a cabeça
#

Uma pequena marca de pixel sobre a cabeça de uma ave diz o estado dela de relance, nas cores de estado da ilha. Ela fica sobre qualquer pose de cabeça em que a ave esteja, e se repete sozinha.

MarcaEstadoMovimento
Um balão de pensamentopensandoos pontinhos se preenchem um por um
! em âmbaruma permissão esperaele pula
? em cianouma perguntaele balança
Brilhos verdesconcluídoeles cintilam e trocam de lugar
# em vermelhofalhouele treme
Uma gota de suorlimite de uso atingidoela escorre
zdormindoeles sobem flutuando

Elas aparecem no card de foco e no chat (o Zeca em 3x) e no habitat (1x); a pílula compacta não tem espaço sobre as cabeças e mantém os selos dela.

O bando no fio
#

  • O Zeca nunca é a ave de uma sessão: ele fica no fio vazio e no chat. A sessão da frente (a que precisa de você, a que você escolheu ou a primeira a chegar) ocupa o lugar dele com a própria ave; toda outra sessão é um vult. Com o Zeca desligado (Settings → Flock & Zeca), um fio vazio fica vazio: nada de Zeca ocioso, nada da assinatura dele.
  • O vult de uma sessão nova chega planando pela direita e pousa; uma sessão que termina decola e vai embora voando.
  • Cada subagente em execução manda um batedor: um Cathartes (os urubus que acham comida pelo olfato) decola do poleiro da sua sessão e circula baixo ao lado dela, e vai embora quando o subagente termina. No máximo três por sessão, seis no total; só na ilha aberta (a pílula recolhida não tem espaço), nenhum com movimento reduzido. O bando e seus batedores passam por trás do card de um conector (o card do GitHub), nunca por cima do texto dele.
  • Visitantes raros: a cada dez a vinte minutos com sessões abertas, um urubu que não é nenhum dos do fio (um abutre do Velho Mundo ou um condor) chega planando pela direita, sobe uma vez na térmica da ilha e segue o caminho, sem nunca pousar; ele passa por trás dos cards e das linhas, nunca por cima do texto deles. Desligue em Settings → Flock & Zeca; nenhum com movimento reduzido ou enquanto a ilha está escondida. O lab traz um na hora: /lab/?visitor=1.
  • Depois de dois segundos ociosa, a ave de uma sessão decola para o céu compartilhado abaixo da ilha. Uma sessão concluída (o agente esperando o próximo prompt) toca primeiro o clipe de concluído, depois decola quando esse clipe e a assinatura da espécie acabam (seis a oito segundos depois que o estado de concluído aparece); o selo “done” dela fica até você dispensá-lo. Cada sessão mantém a sua ave nas transições entre compacto e aberto, na própria fase e velocidade de volta. O bando circula sem parar enquanto está ocioso, de dia. Trabalho traz para baixo só a ave daquela sessão; abrir a ilha deixa as outras aves voando. Sem sessões, não há bando decorativo.
  • O dia de um urubu, pelo relógio local: sem sol, sem térmica. Ao amanhecer (6 às 9) as aves ociosas ficam no fio com as asas abertas ao sol (a pose de asas abertas como um clipe sun próprio, sem marca em cima, para nunca agir como um card); das 9 às 17 elas planam; ao entardecer (17 às 19) descem, e à noite dormem no fio, cochilando poucos segundos depois de parar. O Zeca sozinho também toma sol ao amanhecer. Os visitantes raros só vêm de dia, acima dos mais altos do bando.
  • Cada espécie na sua altura: os Cathartes circulam baixo, o urubu-preto no meio, os condores, o urubu-rei e os do Velho Mundo no alto, na pílula como na ilha aberta.
  • Os voos atualizam a 30 fps usando o timer compatível com o desktop. Subidas e retornos em curva preservam a velocidade orbital, com inclinação sutil. Na térmica cada espécie bate as asas como o próprio clipe fly dela (os Cathartes seguem balançando no V entre as rajadas), e quanto mais larga a asa, mais raras as rajadas: a cada 3,6 s no urubu-preto, por volta de 10 s num condor. Uma ave que se inclina na curva é desenhada, não girada: em cinco passos a asa de cima sobe e a de baixo desce e perde algumas colunas, em células inteiras do mesmo tamanho do voo reto. Os quadros de voo usam o cache de bitmaps existente e renderização nearest-neighbor.
  • O céu é um canvas transparente e sem ponteiro dentro da superfície de desktop existente de 720 por 640; ele não aumenta a região de entrada nem remapeia a janela layer-shell do Linux.
  • Com movimento reduzido (inclusive mudanças durante o voo), as aves voltam às suas cenas estáticas. Uma ave ociosa no poleiro cochila depois de 90 segundos, e uma ave ociosa decola depois de 2, cada uma ±12% conforme a sessão, para o bando nunca se mexer no mesmo passo. Cenas escondidas param os timers de desenho.
  • O agente aparece como uma pequena faixa na base do pescoço (laranja Claude, verde-azulado Codex, rosa OpenCode, índigo Qwen, azul Copilot, violeta para qualquer outra ferramenta, o Antigravity incluído), nunca como a cor da ave.
  • Um clipe toca pelo menos 600 ms antes que um mais calmo o substitua; aprovação, pergunta e falha entram na hora. Um voo sempre pousa antes de o próximo clipe começar.

As espécies
#

O Zeca é um urubu-de-cabeça-preta, a menos que você escolha outra espécie para ele em Settings → Flock & Zeca. O bando vem dos urubus do Brasil por padrão; a mesma página amplia para as Américas (com os dois condores) ou para todos os urubus e abutres do mundo. Toda espécie é construída a partir do rig do Zeca em ui/src/character/flock/ (uma paleta, um tamanho a partir das medidas da ave real, alguns detalhes de pixel, e só os clipes em que a ave real se comporta diferente), então todos os clipes do Zeca funcionam em todas as aves.

  • Tamanho: a envergadura segue a média real (as 37 células do Zeca são 150 cm, então um condor tem 73). A envergadura extra se espalha por igual ao longo do braço e da mão de cada asa, então uma ave grande mantém o pulso, a curva e os dedos em vez de uma barra reta esticada. A pose de banho de sol é desenhada no tamanho de cada espécie, com linhas e colunas acrescentadas dentro da asa e o contorno do corpo redesenhado, então uma ave grande é maior por inteiro, nunca um tronco mais comprido; a asa erguida e o alongamento também crescem com a ave. As pontas das penas da mão só são claras onde as da ave real são (as primárias brancas do urubu-de-cabeça-preta, o prateado dos Cathartes), com as asas abertas, erguidas ou em voo, e o condor-dos-andes mostra o seu painel branco. O comprimento do corpo é comprimido para que as maiores aves ainda caibam na ilha. Os grifos, os condores, o abutre-preto, o abutre-orelhudo e o quebra-ossos têm um corpo alto próprio, com ombros e um pescoço longo que afunda no colar de penas em repouso e se estica quando alerta.
  • Cabeças: toda espécie usa a cabeça do Zeca com a sua pele, o seu olho e o seu bico. De frente, os olhos ficam nas bordas do rosto, com o bico entre eles. As oito maiores (poleiro de 26 linhas ou mais: os dois condores, o quebra-ossos, o grifo, o grifo-do-cabo, o grifo-do-himalaia, o abutre-preto e o abutre-orelhudo) ganham uma cabeça uma linha mais funda e, de perfil, uma coluna mais longa, ou de frente uma coluna de bochecha a mais de cada lado, crescida para cima e para trás, então a ponta do bico e o pescoço ficam no lugar: a cabeça do Zeca num corpo de condor parecia a de uma ave pequena. A sobrancelha entra depois que a espécie pinta a sua pele, então uma testa de penas ou uma cabeça vermelha mantém a sua cor sobre o olho.
  • Asas em voo: uma asa é desenhada no planeio, e as batidas para cima e para baixo a dobram no ombro, mais na mão que no braço, então as batidas são lidas como uma única asa se movendo. Vista de baixo, a borda de ataque é iluminada, as penas de voo atrás dela formam uma faixa mais clara (prateada no urubu-de-cabeça-vermelha e nos urubus-de-cabeça-amarela), a borda de fuga é serrilhada e as primárias se abrem em dedos. Onde as penas de voo da ave de verdade são escuras sob coberteiras claras (o abutre-do-egito, o abutre-das-palmeiras e todos os grifos), a parte de trás da asa é escura; o branco do condor-da-califórnia é um triângulo nas coberteiras, e o quebra-ossos voa com a barriga laranja e a cauda longa em losango. Cada parte de voo também tem uma cópia :molt com uma pena de voo faltando em cada asa, que o voo mostra de dezembro a março (a muda de verão, pelo calendário local).
  • Plumagem em repouso: o urubu-de-cabeça-vermelha é o mais marrom dos três Cathartes, o urubu-de-cabeça-amarela o mais pálido, com as hastes claras das primárias riscando a asa dobrada, e o urubu-da-mata o mais preto, com brilho azul-esverdeado. A cauda branca do abutre-do-egito é uma cunha curta, e o abutre-de-dorso-branco e o abutre-de-dorso-branco-asiático mostram o uropígio branco só como uma faixa na borda das costas, sob a asa dobrada.
  • Quem é quem: o Zeca é a espécie que você escolheu. O core (crates/core/src/flock.rs) dá a cada outra sessão uma espécie do grupo que você escolheu, por um hash do id dela e da estação, um número que o app sorteia ao abrir: uma sessão mantém a sua ave enquanto vive, e o bando muda cada vez que o app abre. Um projeto com três ou mais sessões coroa rei a sessão mais antiga (o urubu-rei), e a coroa fica lá enquanto o foco muda. O rei nunca é sorteado, então continua raro.
  • Assinaturas: toda espécie tem um clipe próprio, a partir de algo que a ave real faz. A ave de uma sessão concluída toca a dela logo depois do clipe de concluído, antes de decolar; o Zeca sozinho num fio vazio (fora do chat) toca a dele vinte segundos depois de se acomodar, e depois uma vez por minuto até cochilar. Uma assinatura que sai do poleiro (urubu-de-cabeça-amarela, grifo-de-rüppell, abutre-de-dorso-branco e abutre-de-rabadilha-branca) acontece no céu: uma vez por volta, enquanto a ave plana, ela toca os quadros de voo dela no seu próprio ponto da volta (crescendo a partir do planeio e voltando a ele, sem passar do topo da ilha), e o urubu-de-cabeça-amarela desce rasante até perto do chão da ilha. O lab também mostra cada uma (/lab/?species=<id>). Com movimento reduzido, o Zeca não toca a dele por conta própria.
EspécieAssinatura
Urubu-de-cabeça-preta (Coragyps atratus)Se refresca: urohidrose, por isso as pernas parecem brancas
Urubu-de-cabeça-vermelha (Cathartes aura)Banho de sol, asas abertas (a pose horáltica); em voo, um V que balança
Urubu-de-cabeça-amarela (Cathartes burrovianus)Baixo sobre o capim, balançando rápido
Urubu-da-mata (Cathartes melambrotus)Espera o rei abrir a carcaça
Urubu-rei (Sarcoramphus papa)Abre a carcaça com o bico mais forte
Condor-dos-andes (Vultur gryphus)A cabeça fica vermelha: dominância
Condor-da-califórnia (Gymnogyps californianus)Corte: cabeça vermelha, asas abertas, uma reverência
Abutre-do-egito (Neophron percnopterus)Joga uma pedra num ovo
Quebra-ossos (Gypaetus barbatus)Solta um osso para quebrá-lo
Abutre-das-palmeiras (Gypohierax angolensis)Anda pela praia
Abutre-de-capuz (Necrosyrtes monachus)O rosto fica vermelho quando agitado
Grifo (Gyps fulvus)Estica o pescoço para fora do colar de penas
Grifo-de-rüppell (Gyps rueppelli)Sobe mais alto: o voo de ave mais alto já registrado
Grifo-do-cabo (Gyps coprotheres)Sente o calor com as manchas azuis do pescoço
Grifo-do-himalaia (Gyps himalayensis)Sacode a neve
Abutre-de-dorso-branco (Gyps africanus)Pousa no meio de um bando, freando com as asas
Abutre-indiano (Gyps indicus)Enfia o pescoço nu na carcaça
Abutre-de-bico-fino (Gyps tenuirostris)Sonda com o bico longo e fino
Abutre-de-rabadilha-branca (Gyps bengalensis)Decola, mostrando as costas brancas
Abutre-preto (Aegypius monachus)Se agiganta sobre os rivais
Abutre-orelhudo (Torgos tracheliotos)Investe
Abutre-real (Sarcogyps calvus)Sacode a cabeça e as barbelas
Abutre-de-cabeça-branca (Trigonoceps occipitalis)Caça presas vivas

Visuais
#

Só o Zeca usa um visual, da estação ou para sempre; os vults mantêm as penas da sua espécie. O core escolhe o visual a partir da data do usuário e da configuração (crates/core/src/looks.rs), e a view o carrega.

VisualQuando (Auto)
witch-hat1º de outubro a 1º de novembro
santa-hat1º a 26 de dezembro
party-hat31 de dezembro a 2 de janeiro
bunny-earsSexta-feira Santa à segunda-feira de Páscoa (Páscoa pelo cômputo de Meeus/Jones/Butcher)
sunglassesNunca: só quando escolhido nas configurações
west-coastNunca: uma bandana azul de paisley amarrada atrás, com as pontas descendo pela nuca, e óculos envolventes
fitted-capNunca: um boné fechado preto, aba para a frente, uma logo escrita em branco na frente, e óculos envolventes
mountain-hatNunca: o chapéu alto de feltro com a copa amassada, uma fita escura e aba larga
headbandNunca: uma faixa branca na cabeça e um curativo embaixo de um olho
dreadsNunca: dreads torcidos descendo pela nuca e ao lado do rosto, até abaixo do queixo, com ponteiras de ouro, e um grill de ouro
front-knotNunca: uma bandana vermelha com nó na testa e as pontas para cima, e uma cruz de ouro numa corrente fina
duragNunca: um durag de seda branco com a cauda descendo pelas costas, um grill de ouro, uma corrente com medalhão
crownNunca: uma coroa de ouro com pedras vermelhas, meio inclinada, e uma corrente com medalhão
bucket-hatNunca: um chapéu bucket vermelho de aba mole, e uma corrente grossa de ouro trançada
clock-chainNunca: óculos grandes de armação branca e um relógio numa corrente, que balança quando ele dança
headphonesNunca: fones grandes prateados, a concha sobre o ouvido, e uma corrente de ouro
shutter-shadesNunca: óculos brancos de persiana e um medalhão
chrome-chainNunca: uma corrente grossa cromada com um medalhão quadrado grande
eye-patchNunca: um tapa-olho com tira dourada, e uma pilha de correntes de ouro

Um visual sazonal é desenhado duas vezes no zeca.py, de perfil e de frente, com onde ele fica na cabeça em repouso e na cabeça de frente. As outras poses seguem de onde a copa e o olho delas se moveram; a olhada para trás usa o perfil espelhado, e em voo ele fica na pequena cabeça de voo. Os outros visuais são compostos de peças (HATS, EYES, GRILL, NECK no zeca.py): uma combinação é uma linha que nomeia um chapéu, óculos, um grill e o que pende do pescoço, e looks() carimba as peças da cabeça numa grade por pose (o grill fica no bico de baixo, que se move mais que a copa), então o renderizador as lê como qualquer visual. Nenhum visual sobe mais de 5 linhas acima da cabeça; o zeca.py recusa um que suba.

O espaço do pescoço é do corpo: uma corrente pende de baixo da faixa do agente (a faixa, a marca do agente, fica inteira) e uma cabeça abaixada a cobre como cobriria de verdade. Um pingente pende do fio e fica uma célula para trás quando o corpo balança para a frente (a dança, a sacudida de uma falha); o peito o segura na volta. A pose de banho de sol usa a vista de frente; o voo não tem faixa, então nada pende ali. Dormindo, a cabeça virada para trás sob as penas usa o que cobre o alto da cabeça (um chapéu, uma bandana, os dreads, os fones) e nada do que fica no rosto; a corrente pende no peito afofado.

ui/src/character/looks.ts grava um visual numa cópia das cabeças e dos quadros de voo do conjunto: toda cabeça cresce as mesmas linhas em cima e suas camadas sobem o mesmo tanto, então uma troca de pose no meio de um clipe mantém o chapéu no lugar e todo clipe, espécie e cache de quadros funciona sem mudanças. Um visual também pode passar da última linha da cabeça (os dreads descem abaixo do queixo): a grade cresce para baixo, o que não move nenhuma camada. Em outra espécie, o visual segue o olho dela (a crista do condor-dos-andes o desce uma linha). O lab mostra a prévia de cada um (/lab/?look=<id>).

Um clique com o botão direito no Zeca abre os visuais dele na ilha (ui/src/island/looks.ts), agrupados como acima: os quatro sazonais, os só de cabeça (os óculos de sol e os cinco estilosos sem nada no pescoço) e os nove com corrente. Cada quadradinho é o quadro ocioso dele usando o visual; o que está sob o ponteiro vai para o poleiro como prévia ao vivo. Os grupos ficam em LOOK_GROUPS (ui/src/character/looks.ts), compartilhados com Settings; um teste do core verifica que cada visual tem um lugar ali.

O Zeca na bandeja
#

No modo Panel (Settings), o Zeca mora no ícone da bandeja em vez da ilha no topo. O ícone tem dois quadros por estado, escolhidos pela atenção do core: ocioso, trabalhando, precisa de você (o mais chamativo: um card espera), concluído e falhou. Cada quadro é desenhado em 22, 24 e 32 px, e o ícone carrega os três, então o painel escolhe o mais próximo do seu tamanho (22 px no padrão do Plasma) e o mostra sem escala. Em 32 px ele é o próprio quadro da ilha (quando precisa de você, asas abertas mais estreitas que as da ilha, largas demais para o ícone); em 22 e 24, um Zeca menor desenhado para eles: pousado, de cabeça baixa enquanto trabalha, estufado e chiando quando falhou, asas abertas quando precisa de você. Todo estado menos o ocioso também tem um selo redondo no canto superior direito com um glifo escuro: pontinhos de trabalho no branco (o último pisca), precisa de você um ponto de exclamação no âmbar que pisca escuro e volta, concluído um check no verde, falhou um X no vermelho. Os quadros mudam devagar (uma piscada de 0,2 s, fora isso pausas de 0,5 a 4 s), nenhum com movimento reduzido. Um clique abre a ilha junto ao painel; o ícone só chama atenção, nunca responde a um card. Os quadros são desenhados pelo zeca.py em app/icons/tray/<size>/, nunca em tempo de execução.

Onde a arte fica
#

  • design/mascots/zeca/zeca.py é a fonte: paleta, partes (corpo, poses de cabeça, quadros de voo) e clipes, os visuais sazonais e as peças de que os outros visuais são feitos. Rode-o depois de uma mudança; ele escreve ui/src/character/zeca/zeca.json, os quadros da bandeja em app/icons/tray/ e as folhas de revisão design/mascots/zeca/clips.png e design/mascots/zeca/looks.png.
  • Um quadro empilha partes em deslocamentos inteiros, então uma pose de cabeça ou uma piscada é desenhada uma vez e reaproveitada.
  • ui/src/character/flock/ transforma o rig do Zeca em cada outra espécie em tempo de execução (rig.ts guarda as transformações, species.ts as 23 espécies); nada é gerado nem versionado para elas.
  • ui/src/character/sprites.ts desenha os quadros e escolhe um pelo tempo; ele não sabe nada de urubus.
  • O lab (npm run dev, depois /lab/) repete cada clipe em loop e faz uma saída completa: decolagem, cruzeiro batendo asas, uma térmica, um planeio de volta, o pouso.