Banir a Carta Antes do Jogo Começar
Esse é o post em que o td-survivors cria uma coluna vertebral de meta-progressão: uma lojinha entre runs onde você gasta moeda em upgrades permanentes, e uma tela que te deixa apagar conteúdo do seu próprio jogo antes de você apertar play. É também o post em que eu, o Doug, assumo que comecei a mexer na arte de verdade, porque os quadradinhos placeholder tavam ficando confortáveis demais. Dois sprite sheets novos de inimigo entraram de fininho.
Da última vez eu jurei que a série tinha acabado, logo depois de jurar que tinha acabado na vez anterior. Eu sou cheio de camadas e também continuo enfiando feature. Essa aqui é sobre o que acontece fora de uma run.
A tela de UNLOCK virou loja
Toda run, os inimigos que você mata soltam moeda, e no fim você saca o dinheiro: 3 de bronze por wave que você spawnou inteira. As moedas carregam feito troco de verdade, dez de bronze viram uma de prata, dez de prata viram uma de ouro, e vão acumulando entre as runs. A tela de UNLOCK, que antes só distribuía torre, agora é onde essa grana vai parar.
A novidade que dá pra comprar lá são os upgrades permanentes: meta upgrades que ficam sempre ativos, em toda run, pra sempre, sem precisar puxar carta. Eles vão do nível 1 ao 100, e o nível é a quantidade que você recebe. Cada nível custa 100 + nível * 25 de bronze, então começam baratinhos e viram um ralo de ouro de respeito quando você tá afundado neles. Como o custo é granular no bronze, tive que ensinar a carteira a gastar abaixo da casa do ouro, o que é uma frase que quer dizer "escrevi o spendBronze e uma pilha de teste pra ele e me senti muito responsável".
Peraí, cadê o Banish e o Reroll?
Se você leu o post das cartas, vai lembrar que Banish e Reroll eram cartas: meta cartas que você tinha a sorte de tirar no meio da run pra devolver uma oferta ou apagar algo do pool. Eu despejei os dois do baralho. Eles não são mais coisa que você acha. São coisa que você tem.
Banish e Reroll são os dois primeiros upgrades permanentes. Compra o Banish até o nível 5 e toda run começa com cinco banishes no bolso. Compra o Reroll até o nível 3 e todo level-up vem com três fichas de "não, obrigado, dá outra". Tirar os dois do pool de cartas resolveu duas coisas boas de uma vez: parou o baralho de desperdiçar um slot te oferecendo um reroll que você não queria, e transformou "queria poder me livrar dessa carta" de sorte no sorteio pra plano que você faz na loja.
E eles não funcionam mais só nas cartas de level-up. A tela de escolha de torre, onde você decide qual torre construir, agora tem os mesmos botões de banish e reroll. Cansou de ver o Cursed Idol toda santa vez? Rerolla as opções de torre, ou banne ele pelo resto da run. Mesmo banishMode compartilhado, mesmos botões, plugados nas duas telas em vez de só uma. (Banir uma torre se desfaz sozinho se fosse esvaziar o pool, porque uma run sem nenhuma torre construível não é uma run, é protetor de tela.)
A parte que fritou um pouco meu cérebro: banish permanente
Vai a feature de que eu não paro de rir. Na tela de UNLOCK, todo card de torre e todo card de upgrade agora tem um checkbox vermelhinho de BANISH. Marca ele, o card ganha uma borda vermelha raivosa, e aquela torre ou upgrade some do pool de todas as runs futuras. Não dessa run. De todas. Você tá enfiando a mão dentro do seu próprio jogo e apagando o conteúdo que não curte, pra sempre, antes de um único inimigo aparecer.
Parece coisa de doido e na real é o melhor tipo de expressão do jogador. Achou o Magnet Pylon sem graça? Banne pra sempre e nunca mais veja ele oferecido. Cansou de um upgrade específico entupindo os seus sorteios? Foi. O pool é seu pra podar.
Tem exatamente uma regra segurando a onda: cada banish permanente gasta um do seu orçamento de banish por run. Então se você comprou Banish até o nível 5 e banne 3 coisas permanentemente na tela de UNLOCK, cada run começa com 5 - 3 = 2 banishes de run sobrando. O número de banishes permanentes é limitado ao seu nível de Banish, então você não consegue apagar mais do que pagou; quando bate no teto, os checkboxes não marcados ficam desabilitados e educadamente te barram. Tudo persistido no save (banishedTowers / banishedUpgrades, retrocompatível com save antigo pra ninguém perder progresso), atrás de helpers puros e testados via TDD, porque mexer no formato do save sem teste é como você transforma um devlog em ticket de suporte.
O asterisco do co-op, que eu acho hilário
Lembra que o servidor de co-op é um processo Node headless que é a única fonte da verdade? Ele tem um ponto cego glorioso: ele não consegue ler o seu save. Os seus banishes, os seus rerolls, o seu pool cuidadosamente podado, tudo isso mora no local storage do seu browser, e o servidor autoritativo nunca conheceu o local storage do seu browser e nunca vai conhecer.
Então no co-op, todo mundo começa com zero banish e zero reroll, exatamente igual save zerado. Toda aquela meta-progressão que você ralou pra conseguir? O servidor dá de ombros. O que você apagou pra sempre voltou. É uma limitação de verdade e eu não vou fingir que não é, mas tem algo poético num modo de jogo onde o servidor impõe igualdade radical simplesmente se recusando a reconhecer que qualquer um de vocês já jogou antes.
E sim, eu finalmente encostei na arte
Hora da confissão. Por onze posts os inimigos foram os tiles CC0 do Kenney, e serviram com honra. Mas eu comecei a experimentar com sprite de verdade, e dois deles vingaram.
O normie, o andarilho básico, foi reduzido pra um sheet 64px de gente: uma textura 256x256 num grid 4x4 de células de 64px, animando a 8fps. Menor, mais limpo, e agora dá pra ler como uma bolinha se arrastando em vez de um borrão. Encolher ele também me deixou rebalancear o cronograma de waves do stage 1 e voltar a rampa de velocidade pro 1.0 chapado, porque ele tava, sinceramente, gordinho demais e rápido demais no tamanho antigo.
O speedy ganhou a promoção maior: um sprite sheet direcional só dele. Antes, o speedy era um tile estático único que deslizava pela tela feito disco de hóquei. Agora ele tem o mesmo layout 4x4 de células de 64px do normie, então ele anima direcionalmente, olhando de verdade pra onde tá correndo. Plugar isso foi quase anticlímax: joga o speedy.png como terceira textura, adiciona uma entrada ENEMY_SHEETS.speedy, coloca sheet: "speedy" no inimigo, pronto. O renderer já sabia animar sheet direcional por causa do normie, então o speedy herdou o sistema inteiro de graça. (Tem um normie reserva e um cachorro, o "catioro", esperando a vez no banco. O elenco tá ficando fundo.)
Não tô dizendo que nada disso já é arte boa. Sou eu, um programador, cutucando um sprite sheet meia-noite. Mas é a primeira vez que o jogo parece minimamente feito de propósito, e depois de um ano de retângulo colorido isso parece gigante.
E vai a direção de arte acidental que eu decidi simplesmente... abraçar. Os sprites novos saíram parecendo vírus e bactéria: umas bolinhas redondas. Em vez de brigar com isso, dei carinhas felizes e fofinhas pra eles, e isso definiu o tom inteiro. Esse não vai ser um jogo sério. É um jogo de zoeira. Você tá se defendendo de uma horda de germe sorridente, e eu tô indo com tudo na palhaçada em vez de fingir que o td-survivors um dia ia ser sombrio e épico. Sempre ia ser bobeira divertida. Agora ele parece bobeira divertida.
Então como é uma run agora?
Você chega na tela de UNLOCK com um punhado de bronze. Compra uns níveis de upgrade permanente. Banne pra sempre as duas torres que você decidiu odiar, gastando dois do seu orçamento de banish pra isso. Aí você começa uma run, já segurando rerolls e um par de banishes, jogando com um baralho que você mesmo curou, olhando um normie um tiquinho menos vergonhoso balançando na direção das suas torres, sorrindo o caminho todo. A run não é mais só onde você faz escolha. É onde você resgata as escolhas que você fez antes dela começar.
Da próxima vez: eu ainda não sei o que as torres deveriam ser. Se os inimigos são micróbio fofinho e alegre, o que eu construo pra fritar eles? Glóbulo branco? Torreta de álcool em gel? Doutorzinho puto da vida? Sinceramente não faço ideia, então fica o convite aberto: se você tem uma boa ideia pra as torres, manda pro dougneves@gmail.com. A melhor sugestão pode acabar no jogo. Vejo você quando parecer ainda mais um jogo, e bem menos sério.