Categorias

Esses loucos programadores de jogos e suas gambiarras maravilhosas

Todo dia é uma gambiarra diferente. O prazo estourou, o projeto está atrasado, não dá tempo de debugar, não dá tempo de implementar uma nova solução, de fazer bonitinho como está nos livros, de comentar, de jogar o pepino pra comunidade e aguardar uma luz. Tem que resolver. E aí o que você faz? Improvisa.

Entretanto, você não é o único a improvisar na árdua tarefa de matar um dragão por dia e trazemos aqui algumas histórias reais de programadores de jogos que atingiram soluções inesperadas para problemas inexplicados!

Atualização na Marra

Hoje em dia os jogadores reclamam que no mesmo dia que o jogo sai já tem correção para baixar. Em um  mundo ideal, é claro que os desenvolvedores publicariam o jogo sem falhas ou erros, mas não é o que acontece. Na verdade, os jogadores tem muito a agradecer por essa possibilidade de baixar atualizações quase em tempo real: antigamente, no PC, o jogador precisava ficar atento ao site oficial e fazer o download no braço, muitas vezes de um servidor lento como uma tartaruga. Jogadores de console? Torcer pelo melhor.

Ratchet and Clank: Up Your Arsenal foi lançado em uma época em que já era possível atualizar jogos remotamente e, sendo o título online, deveria ser uma ferramenta óbvia, correto? Exceto que o estúdio Insomniac desenvolveu o jogo sem qualquer funcionalidade de atualização. E, surpresa!, o jogo precisava ser corrigido.

Mas o título baixava da internet um documento de termos de uso toda vez que iniciava uma sessão e exibia o documento para o jogador (o que, no meu entendimento, já classificaria como bug ou, no mínimo, desperdício de banda). E os desenvolvedores viram ali uma saída para seus problemas…

O código original não tinha nenhum tipo de controle sobre o documento de EULA que era baixado, uma vez que seria baixado sempre do mesmo endereço e a possibilidade de interceptação era mínima. Então, os desenvolvedores sabotaram o próprio arquivo de termos de uso com um tamanho acima do normal, causando um estouro de buffer e provocando o download e execução de código remoto. É exatamente a mesma técnica utilizada por muitos vírus, mas, no caso da Insomniac, o que eles injetaram foi um atualizador no jogo através da vulnerabilidade.

E nunca mais publicaram um título sem um sistema normal de atualizações…

O Bug Fantasma

Em 2002, o jogo Star Wars: Jedi Starfighter estava pronto para ser lançado. Faltava, entretanto, um único e específico bug que não seria aprovado pela Sony para o jogo chegar no PlayStation 2.

Durante o carregamento das cenas após cada missão, o analógico parava de funcionar e a luz apagava no centro do controle. Ninguém sabia o motivo: o problema surgira ao atualizar um componente do jogo, uma biblioteca de código, para atender uma exigência da Sony. O programador responsável pelo carregamento de filmes e pelo código de entrada/saída do controle era o mesmo sujeito. E ele não trabalhava mais na empresa havia meses…

Brett Douville ficou encarregado de desvendar aquele mistério e ele conta que usou uma técnica muito comum para debugar: colorir a borda da tela com diferentes tons para cada segmento de código executado e, assim, marcar o momento exato em que o analógico parava de funcionar.

E o bug sumiu. Misteriosamente.

Faltando dois ou três dias para entregar o produto para o controle de qualidade da Sony, Douville desistiu de tentar entender. Coloriu a borda de preto e entregou.

bug nunca mais apareceu.

Caçador do Fundo Perdido

Richard Morwood não revela o nome do jogo mas conta que ele tinha diferentes fundos que rolavam, na medida que o personagem avançava, de onde concluo que provavelmente era um jogo de plataforma. Ele tinha uma lista de texturas de fundo para serem passadas, mas uma sempre pulava. Depois de um longo tempo tentando descobrir o motivo, seu grande inimigo apareceu: o cronograma. Sem tempo para entender a falha, Morwood não hesitou. Ele duplicou o fundo que pulava na listagem de texturas e resolveu o problema: um deles era pulado, mas o outro não. E o jogo está aí funcionando até hoje.

A Melhor Unidade do Jogo

Embora o jogo de estratégia Force 21 dificilmente seja lembrado, ele certamente possui uma das mais poderosas unidades já vistas em um título do gênero.

Uma das funcionalidades de Force 21 era a câmera capaz de seguir automaticamente a movimentação do esquadrão selecionado pelo jogador. Mas, em determinados momentos, a câmera simplesmente parava de funcionar e ficava estática em um ponto do mapa enquanto o esquadrão prosseguia. Investigando a fundo, o programador responsável descobriu que o bug era disparado após um bombardeio pesado.

Acontece que a câmera era construída a partir da classe PhysicalObject e, se você entende qualquer coisa sobre orientação a objetos, deve imaginar que ela estava herdando propriedades. A câmera tinha velocidade e aceleração para seguir seu pelotão pelo campo de batalha. Mas também tinha pontos de vida. Ou seja, quando o pelotão sofria um bombardeio com dano de área, algumas vezes a câmera era literalmente morta pelo fogo inimigo.

A solução encontrada pelo programador foi aumentar estupidamente os pontos de vida e a blindagem da câmera. Então, sem saber, sempre que acompanhava a movimentação de suas tropas, o jogador estava acompanhando também uma unidade praticamente imortal, mas invisível e sem capacidade ofensiva.

Cavalo de Tróia

Ultima Online, o segundo MMORPG criado, também teve sua cota de problemas com objetos.

Por alguma bizarra decisão do time de programadores, todo personagem de jogador é, na verdade, uma instância do objeto “container”. Um container que não pode ser aberto, mas, ainda assim, um container. Foi a solução que encontraram para o inventário do personagem: você é um baú ambulante.

Para piorar a esquisitice, todo objeto “container” por sua vez era um derivado do objeto “mapa”. Você não guardava objetos em slots no seus containers, mas em coordenadas, igual a um mapa. Seu personagem era um baú ambulante, que na verdade era um mapa de uma superfície muito pequena.

Mas funcionava.

Para comprovar que seus programadores deviam mesmo consumir psicotrópicos exóticos, ficou decidido que o cavalo ficaria guardado dentro do jogador (já que este era um container). A existência do cavalo no inventário geraria um par de calças idênticas ao visual do cavalo, que seriam vestidas(!) e conduziriam o jogador.

Mas um dia é da caça e outro é do caçador e essa gambiarra não funcionou como esperado: os programadores se esqueceram que o jogador-baú também era um mapa, por questões de herança de objetos.

O resultado era que o cavalo virtual ficava passeando dentro do inventário do jogador, comendo(!) itens que eram comestíveis, tirando itens do lugar e até mesmo saindo(!!) do jogador e caindo no limbo, porque o sistema de coordenadas era pequeno e suas bordas não eram intransponíveis. Muitos servidores travaram até o time de desenvolvimento entender o que estava acontecendo e refazer a burrada.

Não Confie na Engine!

Essa anedota nem o programador quis se identificar, mas, aparentemente, um certo motor gráfico tem um bug fruto da mais pura preguiça. O jogo principal que utilizava a engine precisava ter um objeto escondido em um determinado nível, mas os programadores não queriam ter que reexportar o nível já pronto ou fazer outras manobras mais complexas e alguém teve a brilhante ideia de inserir míseras quatro linhas no próprio código fonte do motor:

if( level == 10 && object == 56 )
{
HideObject();
}

Se você manja de programação, já entendeu: as linhas querem dizer que todo objeto identificado pelo número 56 em um nível 10 devem ser escondidos. Sempre.

Um ano depois, um desenvolvedor que utilizou a mesma engine veio reclamar nos fóruns da empresa que não conseguia de jeito nenhum fazer aparecer um objeto no décimo nível do seu jogo…

Obrigado por Jogar!

Wing Commander precisava ser lançado dentro do cronograma, mas, ao encerrar a sessão do jogo, o gerenciador de memória insistia em limpar a tela e exibir uma grotesca mensagem de erro: “MM386 Memory manager error” e vários termos técnicos. Não havia tempo para descobrir o motivo, que não afetava em nada a jogabilidade.

Então, um programador foi lá e mudou a mensagem de erro: “Obrigado por jogar Wing Commander”.

A Gambiarra em Mim Saúda a Gambiarra em Você!

O programador de jogos, como qualquer programador de outras áreas, é aquele que lida com linguagens arcanas que poucos compreendem e cria resultados fantásticos ou desastres monumentais. É aquele profissional sem o qual você não teria jogos.

É um herói anônimo, que costuma viver à sombra do Diretor Criativo ou do CEO do estúdio, que não ganha troféu e não veste smoking, não sobe no palco na E3, não é seguido no Instagram e cujo nome você dá ESC quando chegam os créditos do jogo. Mas ele enfrenta um boss por dia, do jeito que dá, para que aquele título funcione direitinho quando chega até a você e merece nosso respeito.

Viva o improviso!