Doug's Game Dev Log
Sobre
EN|PT-BR
2026-08-08

Agora o Backlog Também Tem Cartas

No post passado o jogo ganhou uma cara. Esse aqui é menos glamouroso e, sinceramente, mais satisfatório: dois dias de correçõezinhas, do tipo que sozinhas parecem nada e juntas fazem a coisa parar de me irritar. Uma torre de gelo que de fato parece gelada, botões que perdoam um clique errado, mira de co-op que mira, rodas de scroll que rolam pro lado certo. E, de forma apropriada pra um jogo construído em torno de escolher cartas, o projeto inteiro foi parar num board cheio delas.

A torre de gelo aprendeu a congelar a sala

A torre de gelo antes era uma arminha triste que dava um pouco de dano e desacelerava exatamente um inimigo. Agora ela se comporta como "gelo" deveria. Ela pega emprestado duas ideias do dardo de veneno: só atira em inimigos que ainda não estão gelados (sem desperdiçar tiros redesacelerando o mesmo alvo), e no impacto espalha o congelamento numa área do tamanho do canhão. Só o inimigo que ela de fato acertou toma dano; todo mundo dentro do raio só fica lento, sem dano colateral.

A parte legal é a geometria. O tiro ainda precisa perseguir o alvo, então eu não podia reusar o splashRadius do canhão pra perseguição (um splash diferente de zero faz o projétil voar pra um ponto em vez de um alvo). Então o raio da área mora num campo separado Projectile.frostRadius, gravado no spawn a partir dos stats por nível, e aplicado no acerto. O projétil persegue tipo um dardo, e depois despeja uma poça de gelo quando cai. Também dei ao impacto um anel azul de splash pra você ver o congelamento acontecer, em vez de só se perguntar por que o pelotão desacelerou.

Os cliques agora disparam quando você solta

Essa é pequena e eu deveria ter feito no primeiro dia. Toda ação de clique-esquerdo antes disparava no pressionar. Ou seja, no instante em que o mouse descia numa carta de level-up, aquela carta estava escolhida, sem devolução. Apertava um botão sem querer e já era.

Agora tudo dispara no soltar. Aperta uma carta, percebe que é a errada, arrasta pra fora, solta: não acontece nada. Isso cobre o jogo inteiro de uma tacada: cartas de level-up, cartas de escolha de torre, todo menu e botão de lobby, a toolbar, o painel de inspeção de torre, reroll e banir, o clique-pra-reiniciar, e colocar ou selecionar torres no tabuleiro. O arrastar-pra-cancelar do clique-direito continua no pressionar porque já tinha a própria saída de emergência. É de longe a mudança mais "por que eu um dia lancei do outro jeito" do lote.

Duas dores de cabeça de co-op e uma roda de scroll ao contrário

O refactor de co-op deixou umas farpas. Primeiro, mirar uma torre no co-op não fazia nada. O cliente renderiza entidades "sombra" cujos ids locais não batem com os ids autoritativos do servidor, e as intenções de mira estavam sendo enviadas com o id local, então o servidor procurava a entidade errada (ou nenhuma) e dava de ombros. A correção é um networkifyIntent purinho que troca o id da torre de local pra rede antes da intenção ir pro fio. Ids não mapeados só passam direto e o servidor os ignora. Com TDD, claro.

Segundo, tornar as telas de level-up e escolha de torre não-bloqueantes pro co-op tinha silenciosamente quebrado o single-player: como ninguém congela o servidor compartilhado pra escolha de carta de um jogador, o single-player também rodava ao vivo, então os inimigos continuavam marchando enquanto você lia as cartas. Agora o single-player condiciona a simulação a uma flag de "tem overlay aberto" e congela direitinho, enquanto o co-op retorna cedo e segue ao vivo. Mesmo caminho de código, dois comportamentos corretos.

E aí a mais boba e mais satisfatória: a roda do mouse rolava a tela de UNLOCK e a de seleção de fase pro lado errado. Inverti o sinal. Pronto. Dez segundos de trabalho, uma vida inteira de alívio.

O projeto ganhou um board cheio de cartas

A outra mudança da semana não é no jogo: o td-survivors agora é tocado a partir de um board do Trello. O Claude Code conversa com ele por um servidor MCP do Trello, então ele consegue ler uma carta, implementar de ponta a ponta, dar push, comentar de volta na carta o que fez, e deslizar ela pra coluna de teste. Configurei as regras de permissão dessas ferramentas de escrita nas settings do projeto pra ele não parar pra pedir autorização toda vez que move uma carta.

Tem uma piada aqui que se escreve sozinha. Esse é um jogo cujo loop inteiro de progressão é comprar três cartas e escolher uma. Agora o processo de desenvolvimento também é uma pilha de cartas onde eu compro a próxima e escolho o que construir. O backlog finalmente combina com o gênero. O bom na prática é que as correções acima pararam de morar na minha cabeça como um vago "a torre de gelo tá ruim" e viraram cartas discretas que eu podia delegar uma de cada vez, que é exatamente por isso que esse lote é um monte de coisinhas prontas em vez de uma coisa grande meio-pronta.

Dois dias, nenhuma mecânica nova, um jogo bem menos irritante, e um fluxo de trabalho que finalmente tem forma. De volta às cartas, os dois tipos.